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>
}
Merci pour la réponse. HitTest serait-il approprié pour obtenir la sous-vue de touchesMoved? – jimj
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