2009-09-02 6 views
1

Dans le SDK iPhone 3.0, comment puis-je être informé lorsqu'une animation zoomToRect:animated: est terminée? Parfois, la vue défilée ne fait pas de zoom (si elle est déjà au bon niveau de zoom), et il ne semble pas y avoir moyen de le détecter.Etre informé lorsqu'une animation zoomToRect: complète

+0

Juste une question: si elle ne fait pas zoom avez-vous besoin notifié? –

+0

Oui, j'ai besoin d'un moyen de comprendre les deux cas. –

+0

Appelez-vous zoomToRect: .... avec exactement le même rect affiché, ou dites-vous que vous zoomez sur un _different_ rect, mais à la même échelle? –

Répondre

4

Sur votre délégué, vous pouvez écouter - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale

voir UIScrollView et UIScrollViewDelegate

+1

Ne fonctionne pas s'il n'y a pas de zoom. –

+1

Vous ne devriez pas appeler zoomToRect si vous n'avez pas besoin de zoomer. Utilisez les propriétés zoom, zoomBouncing et zoomScale de votre scrollview pour détecter cela – slf

+0

https://developer.apple.com/IPhone/library/samplecode/ScrollViewSuite/index.html – slf

2

La façon la plus simple serait sans doute de mettre un chèque avant de commencer l'animation. Si le niveau de zoom est déjà correct, appelez [self performSelectorOnMainThread: @selector (myMethod) withObject: id waitUntilDone: NO].

Vous ne serez pas en mesure d'utiliser la même méthode que scrollViewDidEndZooming, parce que vous ne pouvez passer un argument, mais il déclenche un appel asynchrone sur le thread principal

+0

Une solution de contournement équitable; essentiellement ce que j'ai fini par faire. –