J'aimerais gérer le geste de rotation dans mon application iPhone et faire pivoter une vision d'image au cours de cela. À la fin du geste, je voudrais faire pivoter à une position de fixation de l'imageView.
Donc c'est-à-dire. Si je fais pivoter l'imageView de 0 radian à M_PI / 2 Radians, mais quelque part sur la mi-chemin, je finis avec le geste. Après la fin, je voudrais tester l'angle et s'il est proche de M_PI / 2, réglez-le sur M_PI / 2 sinon 0.
Voici mon code comment j'ai essayé de faire ceci:
i Créez et ajoutez le reconnaissance à ma vue. P>
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"gesture end"); }
3 Réponses :
Si le gesteRecognizer reconnaît le geste, par défaut, la touche retouche ne sera pas appelée ( touchscancéd code> sera appelée à la place.
touché code> ne serait appelé que si le reconnaissance ne serait pas reconnaître le geste). Définir
gesturerecognizer.delaysSouchesended code> à
non code>, et cela devrait fonctionner. p>
Ça ne marche pas. Est-ce que tu sais pourquoi? Toujours pas recevoir la fin.
Donc la méthode est appelée maintenant, mais pas lorsque je libère mes doigts, on l'appelle après avoir commencé la rotation
Donc, il n'est pas appelé à la fin. Des indices?
J'ai trouvé la réponse sur un autre forum. J'espère que cela aidera quelqu'un d'autre aussi. Réponse: p>
Vous pouvez détecter la fin du geste en cochant l'état de l'uirotationGesturerecognizer dans votre méthode d'action. Si [Etat Gesurerecognizer] == uigestreecarcOnterStateTersed, alors c'est fait. Si quelque chose avait plutôt causé à l'annulation (par exemple, un appel téléphonique à venir), vous le verriez ensuite terminer dans UigesurerecOntreStatCantanked à la place. P>
Si vous souhaitez appliquer la rotation de la reconnaissance directement à votre vue plutôt que de le traiter comme un delta à partir de l'emplacement précédent, vous pouvez définir la rotation de Reconnaissance que son état est uigesturerecognerstatebegan, puis il calculera des compensations de cette valeur et vous pouvez ensuite calculer la valeur appliquez-les directement. Cela nécessite juste que vous vous souviendriez de la rotation que vous avez terminée à la dernière fois, puis vous pouvez faire quelque chose comme [Gesurerecognizer Setrotation: LastApplieTationRotation] lorsque l'état de reconnaissance est Uigesurerecognizerstatebegan. P> blockQuote>
Juste au cas où cela vous arrive aussi et c'est la raison pour laquelle vous lisez cette question: "terminé" et "reconnu" sont la même valeur (3). Donc, ce code (à Swift) ne fonctionnera pas:
if (gesture.state == .recognized ||Â gesture.state == .changed) { } else if (gesture.state == .ended) { //do something else //=> never called }