2009-10-28 5 views
1

je la présente sous-classe de UIScrollView:UIScrollView imageViewDidEndZooming pas appelé

@interface MyScrollView : UIScrollView <UIScrollViewDelegate> 

Et je les méthodes déléguées

- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale(float)aScale{ 
    NSLog(@"zoomed"); 
} 
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView{ 
    NSLog(@"willzoom"); 
} 

Quand je zoome MyScrollView viewForZoomingInScrollView est appelé, mais scrollViewDidEndZooming ne sera jamais appelé.

Une idée pourquoi?

+0

Où et comment avez-vous déclaré ces méthodes de délégation? Et où les appelez-vous? Si vous déclarez des méthodes de délégué personnalisées, vous êtes responsable de les appeler depuis votre classe MyScrollView. –

+0

Désolé ... J'ai collé le mauvais code. Maintenant c'est corrigé – Jorge

+0

Qu'en est-il de scrollViewWillBeginZooming? – guruz

Répondre

0

Ok, réponse complètement révisée basée sur votre commentaire ci-dessous. Cela peut être juste une autre faute de frappe, mais votre signature de méthode manque le paramètre final.

Au lieu de:

- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale{ 
    NSLog(@"zoomed"); 
} 

Vous devriez avoir:

- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale:(float)aScale{ 
    NSLog(@"zoomed"); 
} 
+0

Mon erreur. J'ai coupé et collé les mauvaises lignes. J'ai corrigé la question – Jorge

+0

Mon code est basé sur celui-là. Pour simplifier la question j'ai changé le code dans les délégués pour les appels NSLog. Le résultat est le même: viewForZoomingInScrollView est appelé mais scrollViewDidEndZooming n'est pas – Jorge

+0

Damn .... vous avez raison.Typo encore :-(Je l'ai juste dit que je devrais mais il n'est toujours pas appelé. – Jorge

0

Désolé de remonter le fil, mais il est une question très importante. Vous ne dites pas si vous implémentez un outil de reconnaissance de mouvements de pincement séparé ou si vous utilisez le zoom intégré de UIScrollView. De mes propres recherches, j'ai trouvé que si vous utilisez juste UIScrollView pour zoomer appelle viewForZoomingInScrollView pour obtenir la vue que vous voulez zoomer. Ensuite, il appelle scrollViewWillBeginZooming, puis, en effectuant un zoom, il appelle scrollViewDidZoom à plusieurs reprises et quand il a terminé, il appelle scrollViewDidEndZooming. Tout ce que vous attendez. Cependant, si vous implémentez votre propre outil de reconnaissance des gestes à pincement pour rendre le zoom plus fluide ou pour toute autre raison, il appelle seulement viewForZoomingInScrollView au début et scrollViewDidZoom à plusieurs reprises. Je pense que c'est parce que vous avez outrepassé la fonctionnalité intégrée de zoom qui appelle les autres méthodes.

Si vous avez besoin de plus de contrôle, placez-le dans une méthode d'action connectée au dispositif de reconnaissance des mouvements de pincement.