2011-11-17 5 views
0

J'ai un aperçu avec une grille de sous-vues. Lorsque je fais glisser sur/sous les vues, je veux modifier ses propriétés (similaire à UIKeyboard sur iPhone). Les sous-vues sont UIButton sous-classes.iOS - Faites glisser le doigt sur la grille de vues

Je pense que je dois faire une sorte de retouche de contact de la vue d'ensemble, mais je ne sais pas comment cela fonctionne. Quelle est la bonne combinaison de ces méthodes?

– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:

hitTest:withEvent:

Répondre

1

Je pense que vous pouvez utiliser:

– touchesBegan:withEvent: 
– touchesMoved:withEvent: 
– touchesEnded:withEvent: 
– touchesCancelled:withEvent: 

sur votre superview. Une approche possible est d'identifier en touchesMoved quelle sous-vue est actuellement "sous le contact" (c'est-à-dire, dans laquelle se trouve l'emplacement tactile) et de changer son état en conséquence.

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    if(CGRectContainsPoint(subview1.frame, location)) { 
     ... 
    } 
} 

touchesBegan et touchesEnded ne serait pas jouer un rôle majeur dans ce domaine; ils ne seront utiles que pour commencer et terminer le "tracking" que vous faites en touchesMoved.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSSet *allTouches = [event allTouches]; 
    <save initial touch if you need it> 
} 


-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    <do whatever> 
} 
+0

Merci pour la réponse. HitTest serait-il approprié pour obtenir la sous-vue de touchesMoved? – jimj

+0

Bien sûr, vous pouvez; cependant, hitTest transverse toute la hiérarchie des sous-vues. Si vous avez une sorte de mise en page régulière de vos sous-vues, vous serez peut-être mieux d'avoir une sorte de calcul qui vous donne la sous-vue affectée ... – sergio

Questions connexes