iOS – UIImageWriteToSavedPhotosAlbum

我想使用下面的void API来写一个捕获的图像到相册,但我不是很清楚关于2个参数

UIImageWriteToSavedPhotosAlbum ( UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo ); 

从ADC的解释:

completionTarget:可选; 在图像被写入“相机胶卷”相册后应调用其select器的对象。

completionSelector: completionTarget对象的方法select器。 此可选方法应符合以下签名:

 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo; 

completionTarget在这里有什么意义? 有人可以用一个例子来解释如何使用这个参数吗? 或任何资源,可以指导我通过它。

  • completionSelector是在写入图像完成时调用的select器(方法)。
  • completionTarget是调用此方法的对象。

通常:

  • 要么你不需要通知图像的写作完成(在许多情况下,这是没有用的),所以你使用nil两个参数
  • 或者你真的想在图像文件写入相册时得到通知(或者写入错误),并且在这种情况下,你通常实现callback(=在完成时调用的方法)类,你称为UIImageWriteToSavedPhotosAlbum函数,所以completionTarget一般是self

正如文档所述, completionSelector是一个select器,代表具有文档中描述的签名的方法,所以它必须具有如下签名:

 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo; 

它不必具有这个确切的名字,但它必须使用相同的签名,即采取3个参数(第一个是UIImage ,第二个是NSError ,第三个是void*types)并且不返回任何东西( void )。


例如,你可以声明和实现一个方法,你可以这样调用任何东西:

 - (void)thisImage:(UIImage *)image hasBeenSavedInPhotoAlbumWithError:(NSError *)error usingContextInfo:(void*)ctxInfo { if (error) { // Do anything needed to handle the error or display it to the user } else { // .... do anything you want here to handle // .... when the image has been saved in the photo album } } 

而当你打电话给UIImageWriteToSavedPhotosAlbum你会像这样使用它:

 UIImageWriteToSavedPhotosAlbum(theImage, self, // send the message to 'self' when calling the callback @selector(thisImage:hasBeenSavedInPhotoAlbumWithError:usingContextInfo:), // the selector to tell the method to call on completion NULL); // you generally won't need a contextInfo here 

请注意 @selector(...)语法中的多个“:”。 冒号是方法名称的一部分,所以当你写这行时, 不要忘记在@selector (事件训练器)中添加这些':'