【发布时间】:2017-10-01 19:50:28
【问题描述】:
我的应用程序中有一个视图控制器,它显示像 Snapchat 这样的后置摄像头,它在 Swift 3 中运行良好,但是当我更新到 Swift 4 时,由于以下错误,编译器不会让我运行它:
init()不适用于AVCaptureDeviceInput
这个视图控制器应该在没有任何按钮或额外内容的情况下显示相机,就像 Snapchat 一样。所以,这里是完整的视图控制器代码:
import UIKit
import AVFoundation
class cameraViewController: UIViewController , UIImagePickerControllerDelegate , UINavigationControllerDelegate {
var captureSession : AVCaptureSession?
var stillImageOutput : AVCaptureStillImageOutput?
var previewLayer : AVCaptureVideoPreviewLayer?
var imagePicker: UIImagePickerController!
@IBOutlet weak var cameraView: UIView!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
previewLayer?.frame = cameraView.bounds
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
captureSession = AVCaptureSession()
captureSession?.sessionPreset = AVCaptureSessionPreset1280x720
let backCamera = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
let error : NSError?
var input = AVCaptureDeviceInput()
do {
input = try AVCaptureDeviceInput(device: backCamera)
}
catch {
// error
}
if error == nil && (captureSession?.canAddInput(input))! {
captureSession?.addInput(input)
stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]
if (captureSession?.canAddOutput(stillImageOutput))! {
captureSession?.addOutput(stillImageOutput)
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
cameraView.layer.addSublayer(previewLayer!)
captureSession?.startRunning()
}
}
}
}
因为这条线,我无法运行应用程序:
var input = AVCaptureDeviceInput()
【问题讨论】:
-
请记住,用户可以随时撤销相机使用授权(SessionSetupResult)。在尝试访问它之前,您应该始终检查它。除此之外,您应该确保在主队列中执行此操作。 Apple 已发布其 AVCam 示例版本 7。您应该将其用作参考 developer.apple.com/library/content/samplecode/AVCam/…
-
如果在构建时遇到问题,您需要将
photoSettings.availablePreviewPhotoPixelFormatTypes更改为photoSettings.__availablePreviewPhotoPixelFormatTypes和photoSettings.availablePreviewPhotoPixelFormatTypes更改为photoSettings.__availablePreviewPhotoPixelFormatTypes
标签: ios swift4 xcode9 avcapturedevice