Wie nur einmal eine Methode aufrufen während - (void) touchesMoved?
-
19-09-2019 - |
Frage
Ich verwende - (void) touchesMoved
Sachen zu tun, wann immer ich eingeben ein bestimmter Rahmen, in diesem Fall der Bereich einer Taste.
Mein Problem ist, ich will es nur Dinge tun, wenn ich den Rahmen eingeben - nicht , wenn ich meinen Finger in dem Rahmen bewegte.
Wer weiß, wie ich meine Methoden aufrufen kann nur einmal, während ich im Inneren des Rahmens bin und immer noch erlauben Sie mir, es zu nennen noch einmal, wenn ich erneut eingeben es in der gleichen touchmove.
Danke.
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event touchesForView:self.view] anyObject];
CGPoint location = [touch locationInView:touch.view];
if(CGRectContainsPoint(p1.frame, location))
{
//I only want the below to me called
// once while I am inside this frame
[self pP01];
[p1 setHighlighted:YES];
}else {
[p1 setHighlighted:NO];
}
}
Lösung
können Sie einige Attribut Prüfung verwenden, wenn der Code bereits genannt wurde, wenn Sie bestimmten Bereich eintraten. Es sieht aus wie hervorgehoben Zustand p1
Objekt (nicht sicher, was es ist) kann das sinnvoll sein:
if(CGRectContainsPoint(p1.frame, location))
{
if (!p1.isHighlighted){ // We entered the area but have not run highlighting code yet
//I only want the below to me called
// once while I am inside this frame
[self pP01];
[p1 setHighlighted:YES];
}
}else { // We left the area - so we'll call highlighting code when we enter next time
[p1 setHighlighted:NO];
}
Andere Tipps
Simply add a BOOL
, dass Sie in touchesMoved überprüfen und Zurücksetzen in touchesEnded
if( CGRectContainsPoint([p1 frame],[touch locationInView:self.view])) {
NSLog (@"Touch Moved over p1");
if (!p14.isHighlighted) {
[self action: p1];
p1.highlighted = YES;
}
}else {
p1.highlighted = NO;
}
versuchen, eine UIButton mit und verwenden Sie die "Touch Drag eingeben -Verbindung im Interface Builder.