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

War es hilfreich?

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];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top