Je voulais utiliser l'API void suivante pour écrire une image capturée dans l'album photo mais je ne suis pas très clair sur 2 des parameters
UIImageWriteToSavedPhotosAlbum ( UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo );
De l'explication de l'ADC:
completionTarget:
optionnel; l'object dont le sélecteur doit être appelé après que l'image a été écrite dans l'album Camera Roll.
completionSelector:
le sélecteur de méthode de l'object completionTarget. Cette méthode optionnelle doit être conforme à la signature suivante:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo;
Quelle est la signification de completionTarget
ici? Quelqu'un peut-il expliquer avec un exemple comment ce paramètre devrait être utilisé? Ou toute ressource qui peut me guider à travers.
completionSelector
est le sélecteur (méthode) à appeler lorsque l'écriture de l'image est terminée. completionTarget
est l'object sur lequel appeler cette méthode. Généralement:
nil
pour les deux parameters UIImageWriteToSavedPhotosAlbum
, de sorte que le completionTarget
sera généralement self
Comme l'indique la documentation, completionSelector
est un sélecteur représentant une méthode avec la signature décrite dans la documentation, il doit donc avoir une signature comme:
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo;
Il ne doit pas avoir ce nom exact, mais il doit utiliser la même signature, à savoir prendre 3 parameters (le premier étant un UIImage
, le second un NSError
et le troisième étant du type void*
) et ne rien returnner ( void
).
Vous pouvez par exemple déclarer et implémenter une méthode que vous pourriez appeler n'importe quoi de pareil:
- (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 } }
Et quand vous appelez UIImageWriteToSavedPhotosAlbum
vous l'utiliserez comme ceci:
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
Notez le multiple ':' dans la @selector(...)
. Les deux-points font partie du nom de la méthode, donc n'oubliez pas d'append ces ':' dans le @selector (event the trainling) quand vous écrivez cette ligne!