Mit UITouch innerhalb eines UIScrollView
-
25-09-2019 - |
Frage
Just liebäugelt mit dem SDK und ich frage mich, wenn möglich ein UITouch Ereignis innerhalb eines UIScrollView arbeiten kann.
Ich habe Setup eine UIScrollView, die eine große UIView Griffe, innerhalb der UIView ein UIImageView ist, habe ich es geschafft, die UITouch zu bekommen die UIImageView außerhalb des UIScrollView zu ziehen, aber innen ist es das Ereignis nicht zu registrieren.
Ich nehme an, was ich versuchte, die UIImageView um den großen UIView während die UIScrollView bewegt sich entlang des Bildes zu erreichen schleppte, wenn der Benutzer es über den POS, wann die UIView zieht, wenn die UIImageView begann es schleppt, wenn das Sinn macht?
Vielen Dank
Lösung
(Wenn ich die Frage richtig verstanden)
UIScrollView fängt touchMoved
Ereignisse und ausbreitet, sie nicht zu dessen Inhalt, wenn Bildlauf aktiviert ist. Also das Ziehen zu tun in dem UIScrollView Inhalt in meiner app habe ich den folgenden Trick:
touchesBegan: Überprüfen Sie, ob Sie die "ziehbar" Region berühren. Wenn JA - disable Scrollen in UIScrollView.
touchesMoved:. Jetzt als Scrollen ist deaktiviert Ihre Inhalte anzuzeigen empfängt dieses Ereignis und Sie können Ihre ziehbar UIImageView entsprechend bewegen
touchesEnded:. Reaktivieren Scrollen in UIScrolliew
Wenn Sie die Ansicht außerhalb des sichtbaren UIScrollView Bereich ziehen möchten Sie auch manuell überprüfen müssen, wenn Sie in der Nähe der Grenzen sind und manuell anpassen Inhalt Offset (Ich habe nicht versucht, diese selbst aber ich denke, es sollte funktionieren) .
Andere Tipps
Der beste Weg, dies finde ich zu implementieren war die UIScrollView-Klasse selbst zu Unterklasse und fügen Sie dann die Berührungen Ereignis-Methode in der Unterklasse begannen. Das funktioniert für mich.
(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];
}