0
画像をクリックするためのカスタムクラスを作成しようとしています。その中にclickPicture
関数を作成して、UIImage
を返します。ただし、captureStillImageAsynchronously
はvoid
です。私はそれから受け取ったイメージをどのように返すことができますか?ありがとう。復帰機能の無効化
func clickPicture() -> UIImage? {
if let videoConnection = stillImageOutput?.connection(withMediaType: AVMediaTypeVideo) {
videoConnection.videoOrientation = .portrait
stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (sampleBuffer, error) -> Void in
if sampleBuffer != nil {
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
let dataProvider = CGDataProvider(data: imageData!)
let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent)
let image = UIImage(cgImage: cgImageRef!, scale: 1, orientation: .right)
return image //Unexpected non-void return value in void function
}
return nil //Unexpected non-void return value in void
})
}
return nil
}
サイドノート:
あなたは完了ブロックを必要と運命のpuramidを避けてください。ビデオ接続とsampleBuffercanは両方とも 'if let'ではなく' guard let'でチェックされます。 – Alexander
@AMomchilov何が違いですか?私は一般的に 'もしlet 'を使う。 – penatheboss
本質的にこの問題と同じ問題:http://stackoverflow.com/questions/26569724/nsurlconnection-sendasynchronousrequest-cant-get-variable-out-of-closure –