【发布时间】:2017-01-03 13:45:19
【问题描述】:
我试图在我的视图控制器中简单地放置一个相机视图。
我在顶部导入了AVFoundation,以及UIImagePickerControllerDelegate 和UINavigationControllerDelegate 类。
但是,每当我尝试使用 AVCaptureStillImageOutput 时,Xcode 都会告诉我它在 iOS10 中已被弃用,我应该使用 AVCapturePhotoOutput。这完全没问题,但是,只要我想打电话给stillImageOutput.outputSettings,.outputSettings 本身就不可用。因此,我必须使用AVAVCaptureStillImageOutput 才能使其工作,但我有多个警告,因为此功能在 iOS10 中已弃用。
我搜索并搜索,但无法真正找到解决方案。我将衷心感谢您的帮助。我正在学习,所以任何解释都会很棒!代码如下。
import UIKit
import AVFoundation
class CameraView: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var captureSession : AVCaptureSession?
var stillImageOutput : AVCaptureStillImageOutput?
var previewLayer : AVCaptureVideoPreviewLayer?
@IBOutlet var cameraView: UIView!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
captureSession = AVCaptureSession()
captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080
var backCamera = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
var error : NSError?
do {
var input = try! AVCaptureDeviceInput (device: backCamera)
if (error == nil && captureSession?.canAddInput(input) != nil) {
captureSession?.addInput(input)
stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if (captureSession?.canAddOutput(stillImageOutput) != nil) {
captureSession?.addOutput(stillImageOutput)
previewLayer = AVCaptureVideoPreviewLayer (session: captureSession)
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
cameraView.layer.addSublayer(previewLayer!)
captureSession?.startRunning()
}
}
} catch {
}
}
}
【问题讨论】:
标签: ios swift avfoundation swift3 ios10