【问题标题】:calling void after captureStillImageAsynchronouslyFromConnection在 captureStillImageAsynchronouslyFromConnection 之后调用 void
【发布时间】:2014-09-19 16:16:01
【问题描述】:

我正在尝试运行void saveImageToLibrary

[self.avSnapper captureStillImageAsynchronouslyFromConnection:captureConnection
                                                completionHandler:handler]; 

完成了。我该怎么办?

【问题讨论】:

    标签: ios objective-c completionhandler


    【解决方案1】:

    我觉得这就是你想要的

    [self.avSnapper captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error){
    
         CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
         if (exifAttachments){
    
            // Do something with the attachments if you want to. 
            NSLog(@"attachements: %@", exifAttachments);
        }
        else
            NSLog(@"no attachments");
    
        NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
        UIImage *image = [[UIImage alloc] initWithData:imageData];
    
        self.vImage.image = image;
    }];
    

    【讨论】:

    • 我想我需要一些解释。这是什么? “^(CMSampleBufferRef imageSampleBuffer, NSError *error)” ?我显然需要一个不同的函数,所以我需要了解它在做什么以及如何在那里调用一个 void
    • 你所说的“叫作空”是什么意思?至于你不明白的符号,我已经在我的回答中添加了 url 来解释。
    • @suMi 这里 ^ 是块符号,一旦“captureStillImageAsynchronouslyFromConnection:”完成,用 ^ 符号编写的内容将使用所述参数执行。更多你需要熟悉ios中的“iOS中的Blocks”。你也可以看看raywenderlich.com/9438/…
    【解决方案2】:

    如果你需要在函数完成时运行一些代码,有“completionHandler”参数。

    根据documentation:“捕获图像后调用的块。”。

    编辑:您可以阅读有关块编程的信息here。由于块表示法可能有点令人困惑,因此有一个简单的技巧可能会对您有所帮助。当您使用自动完成在 XCode 中创建函数签名时,您需要传递的变量有蓝色占位符。现在,当您在块占位符上点击“输入”时,XCode 会为您生成具有匹配语法的空块。

    【讨论】:

    • 我不知道你要什么。你不懂块符号?不知道怎么保存图片?请说明您的问题。
    • 我不知道“块符号”我什至不知道你在说什么
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多