Wie kann ich Berührungspunkte in meinem erkennen UIScrollView
? Die Methoden zum Delegieren von Berührungen funktionieren nicht.
Antworten:
Richten Sie eine Tippgestenerkennung ein:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[scrollView addGestureRecognizer:singleTap];
und Sie werden die Berührungen bekommen in:
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
CGPoint touchPoint=[gesture locationInView:scrollView];
}
Sie können Ihre eigene UIScrollview-Unterklasse erstellen und anschließend Folgendes implementieren:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"DEBUG: Touches began" );
UITouch *touch = [[event allTouches] anyObject];
[super touchesBegan:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"DEBUG: Touches cancelled");
// Will be called if something happens - like the phone rings
UITouch *touch = [[event allTouches] anyObject];
[super touchesCancelled:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"DEBUG: Touches moved" );
UITouch *touch = [[event allTouches] anyObject];
[super touchesMoved:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"DEBUG: Touches ending" );
//Get all the touches.
NSSet *allTouches = [event allTouches];
//Number of touches on the screen
switch ([allTouches count])
{
case 1:
{
//Get the first touch.
UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
switch([touch tapCount])
{
case 1://Single tap
break;
case 2://Double tap.
break;
}
}
break;
}
[super touchesEnded:touches withEvent:event];
}
Wenn wir über die Punkte in der Bildlaufansicht sprechen, können Sie die Delegate-Methode verwenden:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
und lesen Sie innerhalb der Methode die Eigenschaft:
@property(nonatomic) CGPoint contentOffset
aus der scrollView, um die Koordination zu erhalten.
Dies funktioniert auch bei Touchdown-Ereignissen.
In der aktuell als korrekt markierten Antwort erhalten Sie eine touch point
nur bei einem "Tap" -Ereignis. Dieses Ereignis scheint nur auf "Finger hoch" und nicht auf "unten" zu feuern.
Aus dem Kommentar von yuf in der gleichen Antwort können Sie die touch point
aus der zugrunde liegenden Ansicht auch innerhalb der erhalten UIScrollView
.
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
{
CGPoint touchPoint = [touch locationInView:self.view];
return TRUE; // since we're only interested in the touchPoint
}
Laut Apples Dokumentation der gestureRecognizer
tut:
Fragen Sie den Delegierten, ob ein Gestenerkenner ein Objekt erhalten soll, das eine Berührung darstellt.
was für mich bedeutet, dass ich entscheiden kann, ob a gestureRecognizer
eine Berührung erhalten soll oder nicht.