额外的争论'委托'在电话中(Swift 3)

时间:2016-12-29 14:02:13

标签: ios swift xcode avfoundation

我在这里与代表有一些问题。我在谷歌搜索过,找不到帮助我的答案。所以我写了AVCapturePhotoCaptureDelegate,因为有人告诉我。我该怎么办?(如何处理委托)

stillImageOutput?.capturePhoto(with: sampleBuffer!, delegate: AVCapturePhotoCaptureDelegate){
            if sampleBuffer != nil {
                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                let dataProvider = CGDataProviderCreateWithCFData(imageData)
                let cgImageRef = CGImageCreateWithJPEGDataProvider(dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault)
                let image = UIImage(CGImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.Right)
                self.captureImageView.image = image
            }                
        }

1 个答案:

答案 0 :(得分:0)

AVCapturePhotoCaptureDelegate是一种协议。您可以在此处阅读有关协议的更多信息https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html,但相关信息如下:

  

协议定义了方法,属性等的蓝图   适合特定任务或功能的要求。   然后可以通过类,结构或枚举来采用该协议   提供这些要求的实际实施。随便哪种   据说符合协议的要求   该协议。

capturePhoto要求您执行的操作是传递符合协议的Object。按照惯例,我们称之为委托(将其视为一系列委托给另一个对象的功能)。

这基本上是一个回电。 capturePhoto“know”(因为你符合协议)代表将包含它需要调用的函数,以便你可以处理图像。

要成功传递委托,您需要定义一个符合协议的对象,并将该对象的实例作为委托传递给该函数。您必须声明要从协议中使用的方法。这是一个部分示例 - 不要复制粘贴,你需要弄清楚实现所需的内容。

class PhotoDelegate() : AVCapturePhotoCaptureDelegate {
    optional func capture(_ captureOutput: AVCapturePhotoOutput, 
    didFinishProcessingPhotoSampleBuffer photoSampleBuffer: CMSampleBuffer?, 
    previewPhotoSampleBuffer: CMSampleBuffer?, 
    resolvedSettings: AVCaptureResolvedPhotoSettings, 
    bracketSettings: AVCaptureBracketedStillImageSettings?, 
    error: Error?) {
        // YOUR CODE TO PROCESS THE IMAGE GOES HERE
    }
}

let myPhotoDelegate = PhotoDelegate()
// myPhotoDelegate is what you'll pass to the delegate: parameter

我会非常仔细地注意到,根据AVCapturePhotoCaptureDelegate的文档,这些方法在编译时都是可选的,需要实现的实际方法取决于你传递的设置。

  

照片输出调用的代理方法取决于照片   您启动捕获的设置。该协议中的所有方法都是   在编译时可选,但在运行时您的委托对象必须   根据您的照片设置回复某些方法: