Vous pouvez écouter la notification PLCameraViewIrisAnimationDidEndNotification. Comme ce n'est pas officiellement documenté, vous pourriez être en violation des TOS d'Apple, mais je pense que tant que vous écrivez votre code de sorte qu'il est défensif contre la possibilité que le nom ou le contrat de cette notification pourrait changer (donc à l'avenir vous pourrait ne pas obtenir l'événement) vous serez probablement ok. En d'autres termes, utilisez une minuterie ou une autre technique pour vous assurer que la chose que vous voulez faire quand l'iris est ouvert finira par se produire même si vous n'obtenez jamais la notification ...
Exemple trivial sans programmation défensive. (Bien sûr, vous pouvez enregistrer un intérêt que pour cette notification spécifique ainsi, voir la documentation pour le centre de notification.)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(notificationCallback:)
name:nil
object:nil
];
- (void) notificationCallback:(NSNotification *) notification {
if ([[notification name] isEqualToString:@"PLCameraViewIrisAnimationDidEndNotification"]) {
NSLog(@"Iris open");
// we don't need to listen any more
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
}
Ceci ne répond pas à sa question. Son problème est que sa superposition est visible pendant l'animation de l'iris et il veut montrer quelque chose de différent sur la superposition seulement une fois l'animation terminée. Vous n'avez aucun contrôle sur le temps que prendra l'iPhone pour présenter le contrôleur de la caméra et ouvrir l'iris; Vous ne savez que lorsque vous avez demandé au contrôleur de vue de démarrer ce processus. – ddoughty
J'ai répondu le mieux possible. :-) Ma superposition fait exactement cela: n'apparaît qu'une fois l'animation terminée. En fait, en regardant la version de débogage sur mon téléphone en ce moment, il y a un moment bref (presque indétectable si je ne l'avais pas cherché) quand l'ancienne superposition est montrée après l'animation et avant que l'overlay modifié soit affiché. La superposition n'est jamais affichée au-dessus de l'animation. Si l'OP veut suivre et confirmer que c'est le comportement souhaité, je peux extraire le code et afficher la séquence que j'utilise. – mikestew
Indépendamment du questionneur, je suis intéressé par votre code. :-) Vous semblez sous-entendre que vous avez deux superpositions, mais où/quand changez-vous de l'un à l'autre? Mon autre question concerne votre ligne self.sourceType, ce qui implique que vous sous-classez le sélecteur, mais peut-être que c'était juste un raccourci dans votre réponse? Le code que je l'ai vu et utilisé suit ce thème: a) créer une vue personnalisée b) créer le sélecteur c) ajouter le point de vue que la superposition du sélecteur d) régler la sourceType du sélecteur e) présente le sélecteur Lorsque vous faites cela, vous voyez l'iris ouvert sur votre vue personnalisée. – ddoughty