AVCam 例程解读(IV)
AVCam 是苹果公司为AVFoundation开发者准备的教学例程。该例程构建了一个最基本的ios摄影应用, 调用了大量AVFoundation的基本接口,考量了诸多使用AVFoundation可能出现的异常情况并展示了其处理方式, 同时说明了苹果公司在设计该API时背后的逻辑。本文大量参考 Apple 官方解读文档.
本文使用到的来自Apple的代码,文本以及图片,版权属于Apple.
AVCam(IV): In Progress State Modification
Photo <-> Movie toggleCaptureMode()
Movie -> Photo
首先将movieFileOutput移除,因为在movieFileOutput存在的前提下Live Photo无法启动。之后依次查询Live Photo, Depth Data 和 Portrait Matte的可用情况并视情况启动photoOutput的对应支持和UI。
Photo -> Movie
隐藏Photo模式的相关UI,添加一个AVCaptureMovieFileOutput。
Front <-> Back Camera changeCamera()
第一步,停用UI。之后获取当前使用的镜头位置,根据当前的位置判断要转换的目标。
Current | Preferred |
---|---|
Front | Back, .builtInDualCamera |
Back | Front, .builtInTrueDepthCamera |
如果可以获取到preferred position和preferred device type,那么同时获取。否则只获取position。
接下来,将原先的videoDeviceInput移除,同时需要移除的还有subjectArea的observer,因为它与旧的device相关。然后加入新的observer,最后将device加入session。
将新的device加入之后,重新设置stabilization, livephoto, depth data, portrait matte等属性。在videoDevice被移除的时候,后三个属性都会自动被设置为否。
最后一步提示用户设置结束,启用UI