我正试图将相机 View 放入我的 View Controller 中。
我在顶部导入了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 {
}
}
}
最佳答案
不推荐使用AVCaptureStillImageOutput
意味着您可以在iOS 10中继续使用它,但是:
AVCaptureStillImageOutput
,但是使用AVCapturePhotoOutput
进行宽颜色设置要容易得多。对于RAW捕获或实时照片,AVCapturePhotoOutput
是镇上唯一的游戏。 如果您尽管不赞成而乐于继续,那么您的问题不是
outputSettings
被删除了,即it's still there。对于Beta 6及更高版本,您需要注意一些事项(尽管事实证明这不是问题):在不带显式键和值类型的情况下使用
NSDictionary
的API会以[AnyHashable: Any]
的形式传入Swift 3,而您可能会在其中使用Foundation或CoreFoundation类型。字典不再隐式地桥接到Swift类型。 (有些other questions about beta 6 dictionary conversions可能会将您指向正确的方向。)但是,设置
outputSettings
不会出现任何编译错误。无论是使用完整的代码,还是将其简化为该行的基本部分:var stillImageOutput : AVCaptureStillImageOutput?
stillImageOutput = AVCaptureStillImageOutput()
stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
...我唯一看到的警告是关于弃用。
关于ios - Swift 3中的AVCaptureStillImageOutput与AVCapturePhotoOutput,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39173865/