前置摄像头填充圆形 UIView

2023-12-10

在我正在开发的应用程序中,用户需要进行“自拍”(是的,我知道,但该应用程序仅供私人使用)。

我已经让相机在圆形 UIView 区域中显示一切正常工作,但是我无法让它正确缩放并填充圆圈。这是它现在正在做的事情:

What it's doing

这就是我想要它做的事情:

What I want

这是我的 UIView 的代码:

var cameraView = UIView()
cameraView.frame = CGRectMake(100, self.view.center.y-260, 568, 568)
cameraView.backgroundColor = UIColor(red:26/255, green:188/255, blue:156/255, alpha:1)
cameraView.layer.cornerRadius = 284
cameraView.layer.borderColor = UIColor.whiteColor().CGColor
cameraView.layer.borderWidth = 15
cameraView.contentMode = UIViewContentMode.ScaleToFill
cameraView.layer.masksToBounds = true

我尝试了一些不同的 contentMode 选项,包括 ScaleToFill、ScaleAspectFill 和 ScaleAspectFit。它们都会产生完全相同的结果。


事实证明,相机的“self.previewLayer”有一个属性,可以确定相机的内容如何填充视图。

在下面的代码中,我将“self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspect”更改为“self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill”

extension SelfieViewController:  AVCaptureVideoDataOutputSampleBufferDelegate{
    func setupAVCapture(){
        session.sessionPreset = AVCaptureSessionPreset640x480

        let devices = AVCaptureDevice.devices();
        // Loop through all the capture devices on this phone
        for device in devices {
            // Make sure this particular device supports video
            if (device.hasMediaType(AVMediaTypeVideo)) {
                // Finally check the position and confirm we've got the front camera
                if(device.position == AVCaptureDevicePosition.Front) {
                    captureDevice = device as? AVCaptureDevice
                    if captureDevice != nil {
                        beginSession()
                        break
                    }
                }
            }
        }
    }

    func beginSession(){
        var err : NSError? = nil
        var deviceInput:AVCaptureDeviceInput = AVCaptureDeviceInput(device: captureDevice, error: &err)
        if err != nil {
            println("error: \(err?.localizedDescription)")
        }
        if self.session.canAddInput(deviceInput){
            self.session.addInput(deviceInput)
        }

        self.videoDataOutput = AVCaptureVideoDataOutput()
        var rgbOutputSettings = [NSNumber(integer: kCMPixelFormat_32BGRA):kCVPixelBufferPixelFormatTypeKey]
        self.videoDataOutput.alwaysDiscardsLateVideoFrames=true
        self.videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", DISPATCH_QUEUE_SERIAL)
        self.videoDataOutput.setSampleBufferDelegate(self, queue:self.videoDataOutputQueue)
        if session.canAddOutput(self.videoDataOutput){
            session.addOutput(self.videoDataOutput)
        }
        self.videoDataOutput.connectionWithMediaType(AVMediaTypeVideo).enabled = true

        self.previewLayer = AVCaptureVideoPreviewLayer(session: self.session)
        self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

        var rootLayer :CALayer = self.cameraView.layer
        rootLayer.masksToBounds=true
        self.previewLayer.frame = rootLayer.bounds
        rootLayer.addSublayer(self.previewLayer)
        session.startRunning()

    }

    func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
        // do stuff here
    }

    // clean up AVCapture
    func stopCamera(){
        session.stopRunning()
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前置摄像头填充圆形 UIView 的相关文章

  • iPad 的自适应布局

    我正在关注这篇文章在 ios 中构建自适应布局为 iOS 8 构建自适应用户界面 http www sitepoint com building adaptive user interfaces ios 8 它在 iPhone 上运行良好
  • 查找 NSString 中子字符串的所有位置(不仅仅是第一个)

    有一个子串在字符串中出现多次 我用rangeOfString 不过好像只能找到第一个位置 如何找到子字符串的所有位置 NSString subString1 NSString subString2 n NSRange range1 newr
  • CoreBluetooth 功能无法从 Singleton 运行

    所以我目前在 iPad 和 iPhone 之间建立了蓝牙连接 我已经在中创建了我的测试代码ViewController一切正常 现在我把它移到了 2 个经理类 第一个是CBCentralManager和一个用于CBPeripheralMan
  • 如何在 iOS 11 上的 Swift 中获取 FLAC 文件元数据?

    我需要获取 FLAC 文件的元数据 我尝试了以下代码 let item AVPlayerItem url URL fileURLWithPath path let commonMetadata item asset commonMetada
  • iOS 8 启动图像文件 - 导航栏和状态栏

    我正在使用 Interface Builder 制作 iOS 8 的启动图像文件 我想要的启动图像非常简单 我认为与 设置 应用程序相同 顶部的导航栏带有一个空的分组 TableView 无标题等 请注意 我通常不使用 Interface
  • ios UICollectionView - 设置自动高度

    我正在使用 UICollection 视图创建 3x4 按钮矩阵 iPhone4很好看 高度也比较小 此外 集合视图不会滚动 因为它在可用空间中显示 3x4 矩阵按钮 现在 当我在 iPhone5 上运行相同的应用程序时 我看到底部按钮矩阵
  • 如何在 Objective-C 的动画中使视图振动? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个名为 qShake 的 UIView 当用户犯错误时 我希望该视图在一个小空间内短时间内从左到右晃动 我将如何创建动画来做到这一点
  • 如何从 iOS 本机共享功能中删除某些选项? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一款 iOS 游戏 想知道如何删除 iOS 在自动共享时提供的一些本机选项 例如 分配给联系人 和 打印 我对此做了很多研究 我
  • iOS 6 中的模态视图控制器强制横向方向

    我有一个以纵向模式呈现的 UITabBarController 在其中一个选项卡上 我有一个以模态方式显示 UIViewController 的按钮 一个简单的故事板 segue 执行该操作 我希望这个模态视图以横向模式显示 但我无法让它自
  • ScrollView 内的 SwiftUI 列表

    我想将列表放在 ScrollView 中 以便可以一起滚动列表行和标题 但我发现 ScrollView 中的 List 不起作用 它什么也没显示 我应该同时使用它们 我应该使用 ScrollView 这样当我滚动行时 我可以使标题 图像或文
  • 在 iOS 7 上需要具有非半透明栏的 WantsFullScreenLayout 行为

    我希望能够让我的视图覆盖整个屏幕 位于导航栏和工具栏后面 并将导航栏和工具栏的半透明属性设置为NO 我想要不透明的条 在 iOS 7 之前 这很容易通过设置来完成wantsFullScreenLayout是 然而 在 iOS 7 中 我找不
  • Firebase 查询 - 查找包含字符串的子项

    我在使用 Firebase 查询时遇到了一些问题 我想查询对象 其中对象子值包含特定字符串 到目前为止 我有一些看起来像这样的东西 Firebase ref Firebase alloc initWithUrl https dinosaur
  • iOS DateFormatter dateFormat fromTemplate 中允许使用哪些格式说明符?

    我找不到模板参数中允许的格式说明符列表DateFormatter dateFormat fromTemplate options locale 日期格式 https developer apple com documentation fou
  • Crashlytics 和答案套件的问题

    我在我的应用程序中使用 Crashlytics 来跟踪崩溃 并使用 Answers 工具包来处理自定义事件 我正在使用 pod 文件将框架集成到我的项目中 但是在添加两个 pod 时出现链接错误 pod Fabric pod Answers
  • 在 iOS 上提升 Asio SSL 认证

    我正在尝试在 iOS 上使用 Boost Asio 并且已经解决了所有问题 但如何检查我正在连接的服务器的证书 如何使用 Boost Asio 在 iOS 中检查连接服务器的证书 在我的另一个答案中 您可以看到一个简单的 SSL 客户端 在
  • 何时使用 takeUnretainedValue() 或 takeRetainedValue() 来检索 Swift 中的非托管对象?

    根据将 Swift 与 Cocoa 和 Objective C 结合使用 https developer apple com library prerelease ios documentation Swift Conceptual Bui
  • 识别用户是否在 iOS 6 设置中定义了本机 Facebook 帐户

    有没有办法通过 FACEBOOK SDK 3 1 和 iOS 6 知道用户是否在 iPhone 设置中定义了其 Facebook 帐户以供本机 Facebook 使用 我想要做的是 当打开我的应用程序时 如果用户在 iPhone 设置中定义
  • NSXMLParser 解析使用 Windows-1256 编码的 xml 文件

    我想解析 Windows 1256 编码的 rss 文件 但解析器没有读取它 我用 UTF8 编码做了很多解析 但只有这个不起作用 为什么 带有 Windows 1256 的 rss 文件 http youm7 com Rss asp 解决
  • SwiftUI NavigationView 从其内部开始

    因此 我在页面视图样式的 TabView 中嵌入了一个 NavigationView 首次加载时 NavigationView 将在其内部启动 然后重新加载后即可正常显示 我不确定是什么原因造成的 我制作了一个 GIF 来更好地说明问题 这
  • 不同形状的图像拼贴

    我对照片编辑应用程序开发完全陌生 我如何开发这样的网格样式 以便我可以添加从相机胶卷中选取的多个图像来创建拼贴画 我浏览了下面的链接 但没有找到实现这一目标的方法 任何建议或链接都 会有帮助 LINK1 https stackoverflo

随机推荐

  • 尝试在 Android 1.5 上使用 Base64 时出现“IllegalArgumentException: bad base-64”[已关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 I get java lang IllegalArgumentException bad
  • WPF ItemsControl ItemTemplate 边框与 GroupStyle

    这是我第一次发图片 所以希望效果很好 一张图片抵一千字 我不想打一千字 但是 下图是我想要实现的目标 我有一个需要按属性 组 分组的对象集合 我正在使用绑定到为我进行分组的数据源的 CollectionViewSource 我正在使用 It
  • Javascript函数不修改数组(参考?)

    如果 JavaScript 将函数参数作为原始对象的引用传递 为什么我不能使用这个简单的函数修改原始数组 var array1 one function change array var array2 222 array array2 ch
  • ADB 拒绝 shell 命令 (ls -l /data)

    我不断得到 ADB rejected shell command ls l data 以及运行时的命令提示符adb shell告诉我error device not found虽然模拟器是打开的 我做错了什么 我假设您从命令行运行 adb
  • 如何从unix中的给定日期获取上周日日期

    获取上周日日期作为给定日期 不是当前日期 作为输入的输出 输入示例 2017 年 8 月 30 日 m d Y 输出应该是上周日 08 27 2017 以下所有命令都使用当天作为参考 但我想将参考日期作为输入以获取上周日 请帮我执行命令 日
  • Scaffold-DbContext“登录失败”“错误号:4060,状态:1,类别:11”

    我的 ASP NET MVC 核心应用程序应通过实体框架连接到现有的 MSSQL LocalDB 文件 数据库优先开发需要对现有数据库进行逆向工程 按照中的说明进行操作官方文档 我在 NuGet 包管理器控制台中运行以下命令 Scaffol
  • R:无效的多字节字符串[重复]

    这个问题在这里已经有答案了 我使用不带任何参数的 read delim filename 来读取 R 中制表符分隔的文本文件 df read delim file 这按预期进行 现在我有一个奇怪的错误消息 我无法理解它 Error in t
  • 检测后退按钮但不关闭对话框片段

    我有一个浮动对话框的对话框片段 其中包括一个特殊的键盘 当用户在 EditText 字段内按下时会弹出该键盘 正常的 IME 停止显示 我希望当用户按下后退按钮 就像普通的 IME 服务一样 时键盘被关闭 可见性 GONE 但对话框保持可见
  • 为什么我收到手势识别器不能在原型对象上使用的信息?

    当我将 UITapGestureRecognizer 放入场景中 UITableViewCell 内的 UIView 内时 我从情节提要中收到上述错误 知道为什么我会收到此错误吗 我不确定为什么会出现这种限制 但我知道为什么您会收到错误消息
  • 向 Google 蜡烛图添加注释(发布的解决方案会触发 TypeError)

    我正在尝试向 Google Candlestick 图表添加一些注释 我注意到有人已经问过同样的问题 向 Google 烛台图表添加注释 用户Aper u回复了详细的解决方案来扩展图表并添加注释 因为图表没有内置任何此类功能 但是 当我尝试
  • PHP正则表达式检查英文名称

    寻找正则表达式来检查有效的英文名称 即 A Z a z space only 名字 可选 中间名 姓氏 一个可接受的例子 John von Neumann Thanks 编辑 添加检查代码 usr bin php
  • 如何在 c/c++ 中构建没有导入表的可执行文件?

    我找到了修复导入表的工具here 但是如果没有在 c c 中首先构建导入表 PE 是如何可执行的呢 只是不要使用 CRT 也不要使用任何导入的函数 pragma comment linker entry start int start re
  • findAndModify 或 findOneAndUpdate - “不是函数”

    首先 哪个最好 findAndModify or findOneAndUpdate or findByIdAndUpdate 就我而言 我有一张这样的表 seqkeys id invoice seq NumberInt 1 id recei
  • 在编译时获取`std::initializer_list`的大小

    我正在努力实施reshapefortran 与 C 11 14 的函数 我设计了一个函数 该函数接受两个std initializer list 首先initializer list给出我用来初始化的初始值D维数组 第二initialize
  • GCC 如何自动知道包含 glib 库?

    我用 C 语言编写了一个简单的程序 它使用glib h 但是当我编译它时 我收到如下错误 gcc test c o test test c 3 18 fatal error glib h No such file or directory
  • Facebook 成功登录后,ExternalLoginConfirmation 返回 null

    在MVC 5模板中实现Facebook登录 添加了应用程序ID和密码 最初登录失败 因为它返回 null public async Task
  • Twitter 的 Bootstrap typeahead 设置

    我用的是官方的推特上的例子 主要问题是 我可能不知道如何使用霍根怪物 JS端 search name typeahead name name remote url entities search autocomplete json quer
  • MVC 3 和 WebForms 可以在网站上共存吗?

    我目前有一个网站 其中有一个 WebForms 4 网站 该网站是 www mysite co uk 我目前正在使用 MVC 3 开发一个微型网站 我想将其上传到同一网站 但在不同的目录下 这可能吗 或者我需要创建一个新网站吗 是的 这是可
  • 如何使用运动布局缩放父视图内的textView?

    我正在尝试缩放容器视图内的 textView Activity 使用运动布局 如果我不将 textView 放置在容器内 我可以缩放它 这是我的活动布局和运动布局描述文件 如何使scaleX和scaleY工作 活动布局
  • 前置摄像头填充圆形 UIView

    在我正在开发的应用程序中 用户需要进行 自拍 是的 我知道 但该应用程序仅供私人使用 我已经让相机在圆形 UIView 区域中显示一切正常工作 但是我无法让它正确缩放并填充圆圈 这是它现在正在做的事情 这就是我想要它做的事情 这是我的 UI