iOS: Comment obtenir la durée d'appui long geste?
Je suis en train de travailler sur un jeu dans lequel un attribut d'un objet de jeu est définie par une longue pression sur l'objet lui-même. La valeur de l'attribut est déterminé par la durée de la presse à long geste. Je suis en utilisant UILongPressGestureRecognizer à cette fin, il est donc quelque chose comme ceci:
[gameObjectView addGestureRecognizer:[[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handle:)]];
Alors la fonction de gestionnaire
- (void)handle:(UILongPressGestureRecognizer)gesture {
if (gesture.state == UIGestureRecognizerStateEnded) {
//Get the duration of the gesture and calculate the value for the attribute
}
}
Comment puis-je obtenir la durée de la presse à long geste dans ce cas?
OriginalL'auteur Ryan Dao | 2012-02-23
Vous devez vous connecter pour publier un commentaire.
Je suis sûr que le geste ne pas stocker ces informations d'accès. Vous ne pouvez définir une propriété appelée minimumPressDuration qui est la quantité de temps avant que le geste est reconnu.
Solution de contournement avec ios 5 (non testé):
Créer un NSTimer propriété appelée à rebours:
@property (nonatomic, strong) NSTimer *timer;
Et un compteur:
@property (nonatomic, strong) int counter;
Puis
@synthesize
Ainsi, lorsque le geste commence à démarrer une minuterie qui déclenche l'incrémentation méthode à chaque seconde jusqu'à ce que le geste se termine. Dans ce cas, vous devrez définir le
minimumPressDuration
à 0 dans le cas contraire, le geste ne démarre pas tout de suite. Puis faire ce que vous voulez avec la lutte contre la!Vérifiez le code ci-dessus. J'espère que ça marchera pour vous! Si vous n'êtes pas en utilisant ios 5 vous devrez peut-être faire quelques changements.
J'ai été en évitant de créer une propriété juste à cet effet, mais je suppose qu'il n'y a pas d'autre moyen. J'utilise NSDate au lieu de NSTimer de sorte que le code peut être plus propre. Merci pour votre réponse!
Vraiment utile, merci.
Superbe. Je vous remercie.
OriginalL'auteur Rupert Horlick
Pas de minuteries nécessaire. Vous pouvez l'atteindre de cette façon:
Aussi, ne pas oublier de régler geste de reconnaissance de la
minimumPressDuration
à0
lors de la création, si vous voulez obtenir la durée réelle de l'appui long:myLongPressGestureRecognizer.minimumPressDuration = 0
OriginalL'auteur Just Shadow
Il semble de loin la plus propre et la plus simple des solutions orientées objet Cocoa Touch est à la sous-classe UILongPressGesture. Voici un exemple écrit en Swift.
Si vous souhaitez inclure le temps à partir du robinet d'abord, vous pouvez l'inclure lorsque vous calculez la durée, par l'addition de geste.minimumPressDuration. L'inconvénient est qu'il est probablement de ne pas être à la micro-seconde précise, étant donné qu'il existe probablement une petite (toute petite) quantité de temps qui s'écoule entre le geste qui a été déclenché et votre .Démarrer le gestionnaire de la demande. Mais, pour la grande majorité des applications qui ne compte pas.
OriginalL'auteur Randy Hill
Voir le "minimumPressDuration de la propriété". Selon la documentation:
OriginalL'auteur fbernardo
Je sais que c'est une réponse tardive mais cela fonctionne parfaitement pour moi dans IOS 7 & 8 sans avoir à créer une minuterie.
OriginalL'auteur inVINCEable
Vous pouvez l'obtenir par la Suite dans Swift 3.0
Logique : Juste de l'affectation de la temps de la presse et de trouver la différence de temps quand le contact se termine
Code :
OriginalL'auteur Janmenjaya
Il semble que, avec les nouvelles versions iOS (10 pour moi en ce moment), le long appuyez sur la reconnaissance des rappels pour les deux
.begin
et.ended
états se produisent l'un après l'autre, qu'après la fin de l'événement, c'est seulement lorsque vous soulevez votre doigt de l'écran.Qui fait la différence entre les deux événements fractions de millisecondes, et non pas ce que vous étiez à la recherche pour.
Jusqu'à ce que le problème sera résolu, j'ai décidé de créer un autre geste de reconnaissance à partir de zéro dans swift, et qui serait son travail squelette.
Ensuite, vous pouvez accéder à la
.duration
propriété de laLongPressDurationGestureRecognizer
geste de reconnaissance facilement.Par exemple:
Cet exemple précis, ne pas tenir compte du nombre de touche a effectivement eu lieu, ou de leur emplacement. Mais vous pouvez facilement jouer avec elle, l'extension de la LongPressDurationGestureRecognizer.
OriginalL'auteur Liron Berger