Question

Il suffit de jouer avec le SDK et je me demandais si possible un événement UITouch peut travailler dans un UIScrollView.

J'ai installé un UIScrollView qui gère un grand UIView, à l'intérieur du UIView est un UIImageView, j'ai réussi à obtenir le UITouch pour faire glisser le UIImageView extérieur de la UIScrollView mais l'intérieur est de ne pas enregistrer l'événement.

Je suppose que ce que je voulais accomplir traînait le UIImageView autour de la grande UIView tandis que le UIScrollView se déplace le long de l'image si l'utilisateur fait glisser au-delà du point de vente du moment où le UIView lorsque le UIImageView a commencé il est glisser, si cela fait sens?

Merci

Était-ce utile?

La solution

(Si je comprends bien la question)

UIScrollView INTERCEPTIONS touchMoved événements et ne les propagent pas à son contenu si le défilement est activé. Donc, pour faire le traînement dans le contenu UIScrollView dans mon application, je fait le tour suivant:

touchesBegan: Vérifiez si vous touchez la région "draggable". Si OUI - désactiver le défilement dans UIScrollView.

touchesMoved:. Maintenant que le défilement est désactivé le contenu de votre vue reçoit cet événement et vous pouvez déplacer votre draggable UIImageView en conséquence

touchesEnded:. Réactiver le défilement dans UIScrolliew

Si vous voulez faire glisser la vue extérieure de la zone UIScrollView visible, vous devrez peut-être vérifier manuellement si vous êtes près des limites et régler manuellement le contenu de décalage (je ne l'ai pas essayé moi-même mais je pense que cela devrait fonctionner) .

Autres conseils

La meilleure façon de mettre en œuvre ce que j'ai trouvé sous-classe la classe UIScrollView elle-même, puis ajouter la touche a commencé méthode d'événement dans la sous-classe. Cela a fonctionné pour moi.

(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];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top