首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3照片拍摄

Swift 3照片拍摄
EN

Stack Overflow用户
提问于 2016-09-14 13:57:07
回答 2查看 1.9K关注 0票数 3

我在使用这段代码:

代码语言:javascript
复制
func capturePhoto(blockCompletion: @escaping blockCompletionCapturePhoto) {
    guard let connectionVideo  = self.stillCameraOutput.connection(withMediaType: AVMediaTypeVideo) else {
        blockCompletion(nil, nil)
        return
    }

    connectionVideo.videoOrientation = AVCaptureVideoOrientation.orientationFromUIDeviceOrientation(orientation: UIDevice.current.orientation)

    self.stillCameraOutput.captureStillImageAsynchronouslyFromConnection(connectionVideo) { (sampleBuffer: CMSampleBuffer!, err: NSError!) -> Void in
        if let err = err {
            blockCompletion(image: nil, error: err)
        }
        else {
            if let sampleBuffer = sampleBuffer, let dataImage = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer) {
                let image = UIImage(data: dataImage)
                blockCompletion(image: image, error: nil)
            }
            else {
                blockCompletion(image: nil, error: nil)
            }
        }
    }
}

它在SWIFT2.0中运行得很好,但是在转换之后就不再工作了。这一行:

代码语言:javascript
复制
self.stillCameraOutput.captureStillImageAsynchronouslyFromConnection(connectionVideo) { (sampleBuffer: CMSampleBuffer!, err: NSError!) -> Void in 

给出了以下错误:

无法将类型'(CMSampleBuffer!,NSError!) -> Void‘转换为预期的参数类型((CMSampleBuffer?,错误?) -> Void)!’

我已经试过一些东西了,但没能解决。希望有人能帮我。

EN

回答 2

Stack Overflow用户

发布于 2016-09-14 15:04:03

什么错误

无法将类型'(CMSampleBuffer!,NSError!) -> Void‘转换为预期的参数类型((CMSampleBuffer?,错误?) -> Void)!’

基本上说,您的论点是错误的类型((CMSampleBuffer!, NSError!) -> Void),而它应该是类型的((CMSampleBuffer?, Error?) -> Void)!

要实现这一点,尝试使用以下代码,它将自动使您的块符合正确的类型:

代码语言:javascript
复制
self.stillCameraOutput.captureStillImageAsynchronouslyFromConnection(connectionVideo) { sampleBuffer, error in
    //do stuff with your sample buffer, don't forget to handle errors
}

这看起来是一种奇怪的类型,但我认为这是苹果在将这段代码从ObjC迁移到Swift 1到Swift 2到Swift 3时所犯的一个小错误。

我还没有测试过这段代码,但我认为它应该能工作,让我知道它是否真的成功了!

票数 3
EN

Stack Overflow用户

发布于 2016-09-15 18:52:12

在第三次行动中,这个命令改变了!

发自:

代码语言:javascript
复制
captureStillImageAsynchronouslyFromConnection

至:

代码语言:javascript
复制
captureStillImageAsynchronously

所以,试试下面的代码:

代码语言:javascript
复制
self.stillCameraOutput?.captureStillImageAsynchronously(from: connectionVideo, completionHandler: {
         (sampleBuffer, error) in
  // do your stuff here
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39492339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档