如何使用Swift在iOS应用中构建自定义相机?
如果您正在阅读本文,则可能正在构建下一个与Instagram或Snapchat竞争的大型社交媒体应用程序,或者是一个可以帮助人们每天拍照的简单应用程序。 我想谈的是建立像Snapchat一样出色的自定义相机。
我不会详细介绍录制视频或拍照的内容,本文重点介绍构建自定义相机的UI部分。 希望我能写一篇有关录制视频和拍照的文章。
让我们开始…
创建一个名为CameraViewController的新视图控制器,然后开始导入和实现。
导入UIKit
导入AVFoundationclass CameraViewController:UIViewController {
将您的拍照按钮和照片预览视图放到情节提要中的视图控制器上。
@IBOutlet弱var photoPreviewImageView:UIImageView!
创建一个从按钮到视图控制器的操作,并将其命名为didTapOnTakePhotoButton 。
@IBAction func didTapOnTakePhotoButton(_ sender:UIButton){}
使用AVFoundation库可以进行摄影机操作,我们需要为此定义一些变量。
var会话:AVCaptureSession?
var stillImageOutput:AVCaptureStillImageOutput?
var videoPreviewLayer:AVCaptureVideoPreviewLayer?
开始在viewDidLoad方法中配置相机
覆盖func viewDidLoad(){
super.viewDidLoad()
会话= AVCaptureSession()
session!.sessionPreset = AVCaptureSessionPresetPhoto let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
var错误:NSError?
var输入:AVCaptureDeviceInput!
做{
输入=尝试AVCaptureDeviceInput(设备:backCamera)
}将let error1捕获为NSError {
错误=错误1
输入=无
打印(错误!.localizedDescription)
}
如果错误== nil && session!.canAddInput(input){
会话!.addInput(输入)
stillImageOutput = AVCaptureStillImageOutput()
如果会话,则stillImageOutput?.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG]!canAddOutput(stillImageOutput){
会话!.addOutput(stillImageOutput)
videoPreviewLayer = AVCaptureVideoPreviewLayer(会话:会话)
videoPreviewLayer!.videoGravity = AVLayerVideoGravityResizeAspect
videoPreviewLayer!.connection?.videoOrientation = AVCaptureVideoOrientation.Portrait
PreviewView.layer.addSublayer(videoPreviewLayer!)
session!.startRunning()}
}
}
}
覆盖func viewDidAppear(动画:布尔){
super.viewDidAppear(动画)
videoPreviewLayer!.frame = PreviewView.bounds
}
您需要在真实设备上运行该应用程序,因为模拟器没有摄像头,因此在这种情况下它实际上不会运行。