2009-06-25 8 views
3

J'ai des UIViews que j'aimerais que l'utilisateur puisse "feuilleter" sur l'écran. Ils ne sont pas des vues de défilement. Ils contiennent simplement une image raster (png). Quelqu'un peut-il me diriger vers un exemple de code, etc pour m'aider à démarrer? Quelque chose d'un peu plus lourd que "MoveMe" là-bas qui aide à détecter un "film" (vs un "nudge" ou un glisser-déposer) et ensuite porte la vue dans la direction du "film"?Comment "feuilleter" un UIImageView?

OpenGL probablement trop. Si possible, j'aimerais rester dans le domaine de Core Graphics/Animation.

Répondre

0

Pour détecter le toucher, dans un contrôleur de vue, vous pouvez utiliser les méthodes touchesBegan et touchesEnded, stocker le contact de TouchesBegan, et si le toucher se déplaçait plus d'une certaine quantité à gauche ou à droite, c'était un film, pas un coup de coude à gauche ou à droite.

+0

oui, mais cela ne distinguerait pas nécessairement une traînée d'un film. j'aurais peut-être dû être plus précis. Quelqu'un "ramasser quelque chose" et "laisser tomber" il doit être manipulé différemment de quelqu'un "piquant" (jeter). – Meltemi

+0

Quelle est la différence entre un "ramasser quelque chose" et "laisser tomber" et feuilleter quelque chose? – InFreefall

+0

Imaginez une pièce sur votre bureau. vous pouvez le ramasser et le déposer dans un bol ou vous pouvez le "feuilleter" à une autre partie de votre bureau. vous l'accélérez avec le flick puis "gravity" et "friction" le mettent au repos ... – Meltemi

0

Supposons que vous ayez un UIView appelé aView et deux UIImageViews, page1 et page2. Supposons que vous avez page1 déjà comme un sous-vue dans aView, ce code renversera page1-page2:

[UIView beginAnimations:@"someId" context:nil]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:aView cahe:YES]; 
[page1 removeFromSuperview]; 
[aView addSubview:page2]; 
[UIView commitAnimations]; 
+0

Je ne suis pas la transition entre les "pages" par exemple. Plus comme essayer de lancer des images d'un côté de l'écran à l'autre. – Meltemi

2

Je dirais que la façon easyeist d'implémenter ceci serait de mettre vos vues dans un conteneur UIScrollView avec la pagination activée et de le laisser s'inquiéter de toutes les actions de "flick". Fonctionne très bien pour moi.

Vous pouvez même avec un effort supplémentaire avoir des vues paresseuses charger les images.

+0

Mais je ne veux pas d'effet de scroll. Je veux que les objets restent dans les limites de l'écran. Je veux juste un geste rapide pour les envoyer d'un côté de l'écran à l'autre. donc le film les mettrait en mouvement et alors "gravité" et "friction" les ralentiraient ... – Meltemi

+0

C'était la solution parfaite dans mon cas, car je n'avais besoin que d'un mouvement à gauche ou à droite pour que le balayage balaie l'effet. – Elise

1

Je suppose que vous pourriez réaliser ceci facilement en prenant la réponse de nazgul42 et en vérifiant également le temps entre les deux événements mentionnés. Le temps court et la longue distance combinés pourraient alors être interprétés comme des films. Vous pouvez également déterminer la direction du film en calculant les coordonnées des deux points de contact.

0

Je trouve ici un fil conducteur, bien que la méthode me préoccupe -

http://discussions.apple.com/message.jspa?messageID=7862186

Il ne prend pas la vitesse ou horodatages en compte; juste la distance depuis la dernière mise à jour de l'événement. Si Apple a déjà modifié la fréquence/la granularité des mises à jour d'événements, ce code pourrait se casser.

0

essayez d'utiliser UIPanGentureRecognizer Exemple de code:

UIPanGestureRecognizer *imageGesture = [[UIPanGestureRecognizer alloc] 
             initWithTarget:self 
             action:@selector(imageDragged:)]; 
[imageView1 addGestureRecognizer:imageGesture]; 

puis

- (void)imageDragged:(UIPanGestureRecognizer *)gesture{ 
UIImageView *imageView = (UIImageView *)gesture.view; 
CGPoint translation = [gesture translationInView:imageView]; 

imageView.center = CGPointMake(imageView.center.x + translation.x, 
           imageView.center.y + translation.y); 
imageView2.center = imageView.center; 
imageView3.center = imageView.center; 

[gesture setTranslation:CGPointZero inView:imageView];}