2009-09-27 6 views
3

J'ai deux UIScrollViews à défilement horizontal empilés verticalement les uns sur les autres dans un ViewController. Chaque UIScrollView occupe la moitié de l'écran. J'essaie de suivre indépendamment la position des deux UIScrollViews.Utilisation de scrollViewDidScroll avec plusieurs UIScrollViews

Je l'ai utilisé avec succès ce pour suivre la position de la partie supérieure UIScrollView:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView1 { 

int Position = (scrollView1.contentOffset.x); 

    if (Position == 0) { 
    NSLog(@"Play A"); 
    } 

    else if (Position == 280) { 
    NSLog(@"Play B"); 
    } 

//etc. 
} 

Je voudrais suivre la position du UIScrollView fond ainsi.

Lorsque je tente d'utiliser ceci:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView2 { 

int Position2 = (scrollView2.contentOffset.x); 

if (Position2 == 0) { 
NSLog(@"Play A2"); 
} 

else if (Position == 280) { 
NSLog(@"Play B2"); 
} 

//etc. 
} 

Je reçois une erreur qui dit "Redéfinition de FirstViewConroller scrollViewDidScroll".

Ainsi, être déterminé à aller, j'ai essayé une solution plutôt hackish et a tenté d'utiliser cette place:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView2 

{ 

int Position2 = (scrollView2.contentOffset.x); 

if (Position2 == 0) { 
NSLog(@"Play A2"); 
} 

else if (Position2 == 280) { 
NSLog(@"Play B2"); 
} 

//etc. 
} 

Le problème est qu'il déclenche les deux méthodes quand je me déplace ou l'autre des UIScrollViews . Par exemple - si je déménage 280 pixels (une image) à droite, la sortie que je reçois dans la console est du bas:

regarderb
PlayB2

Et si je déplace le haut UIScrollView trois images à droite la sortie que je reçois est:

regarderC
PlayC2

Ce qui ne fait pas de sens pour moi.

Je pense que je me heurte peut-être à ma propre compréhension incomplète du fonctionnement des délégués. Dans la méthode viewDidLoad, je règle les deux:

scrollView1.delegate = self; 
scrollView2.delegate = self; 

Peut-être que cela fait partie du problème? Peut-être que je cause des problèmes en déclarant que les deux scrollViews ont le même délégué? Pas sûr.

J'ai également essayé de combiner toutes mes instructions conditionnelles en une seule méthode - mais je veux seulement suivre la position du UIScrollView inférieur quand il se déplace et la position du UIScrollView supérieur quand il se déplace, et mettre la logique tout en une méthode rapporte les deux positions quand l'une bouge et ce n'est pas ce que je cherche.

Toute aide est appréciée. J'adorerais résoudre ce problème particulier, mais aimerais vraiment comprendre les problèmes plus importants avec la façon dont j'aborde cela. Encore nouveau à cela. Continuez à penser que je commence à comprendre, et puis je tombe sur quelque chose qui m'arrête dans mes traces.

Répondre

14

C'est exactement ce que le paramètre UIScrollView est pour. Créer des connexions à scrollView1 et scrollView2 dans l'IB, puis faire:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    if (scrollView1 == scrollView) { 
     // Do stuff with scrollView1 
    } else if (scrollView2 == scrollView) { 
     // Do stuff with scrollView2 
    } 
} 
+0

thankyou merci merci C'était tout ce dont j'avais besoin. Si simple. Me fait sentir comme un idiot. J'aurais dû réaliser que j'avais besoin de spécifier quel scrollView je voulais suivre dans la méthode. Merci pour la poussée dans la bonne direction, je repars pour les courses. – crgt

+0

au lieu de scrollview1 == scrollview use [scrollview1 isEqual: scrollView] – tapmonkey

+1

En fait, nous ne sommes intéressés que par l'égalité des pointeurs, puisque le pointeur fournit l'identité unique de la vue. – kperryua

0

Il n'y a aucune raison pour le même objet ne peut pas être le délégué de plusieurs scrollviews différents. La raison pour laquelle -scrollViewDidScroll: vous passe le scrollview en question est que vous savez scrollview fait défiler.

Ceci est le modèle général pour les messages de délégation.

Questions connexes