如何使用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
}

您需要在真实设备上运行该应用程序,因为模拟器没有摄像头,因此在这种情况下它实际上不会运行。