Comment faire un clignotant (ou clignotant) curseur sur l'iphone?
Je suis en train de créer un "curseur clignotant" dans UIKit, j'ai essayé comme indiqué ci-dessous, ayant 2 fonctions qui, en gros, de continuer à appeler les uns les autres jusqu'à ce que le curseur est caché. Mais cela conduit à une belle récursion infinie... pour une raison quelconque, les fonctions s'appellent les uns les autres tout de suite, pas chaque demi-seconde comme prévu.
J'ai essayé de revenir si le "fini" paramètre n'est pas OUI (en décommentant la " si!ok) de la ligne), mais qui n'entraîne pas d'animation à tous les...
Une meilleure idée? Ai-je raté quelque chose, est-il un moyen plus facile de faire un "curseur clignotant"?
- (void)onBlinkIn:(NSString *)animationID finished:(BOOL)ok context:(void *)ctx {
if (cursorView.hidden) return;
//if (!ok) return;
[UIView beginAnimations:nil context:UIGraphicsGetCurrentContext()];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(onBlinkOut:finished:context:)];
cursorView.textColor = [UIColor grayColor];
[UIView commitAnimations];
}
- (void)onBlinkOut:(NSString *)animationID finished:(BOOL)ok context:(void *)ctx {
if (cursorView.hidden) return;
[UIView beginAnimations:nil context:UIGraphicsGetCurrentContext()];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(onBlinkIn:finished:context:)];
cursorView.textColor = [UIColor clearColor];
[UIView commitAnimations];
}
- Le contexte paramètre est un pointeur void, pas un CGContextRef (bien que le passage d'un CGContextRef est valide, il ne sera certainement pas utile)
Vous devez vous connecter pour publier un commentaire.
Sur la délégué:
Et pour démarrer l'animation:
Également, vous assurer que votre classe a un shouldContinueBlinking variable d'instance
Faire le Cœur de l'Animation de la manière:
Où vue est le UIView vous voulez à clignoter. Core Animation rend cela très pratique car il sera automatiquement inverse de l'animation pour vous. Gardez à l'esprit que votre durée complète est le double de ce que vous définissez dans le champ durée, parce que la valeur que vous spécifiez s'applique à la direction vers l'avant. Si vous voulez l'ensemble de l'animation pour l'exécuter (en avant puis en arrière) dans la durée spécifiée, diviser la durée de moitié.
Matt Long, en réponse à Swift 4:
Très probablement, vous êtes le blocage de la boucle principale et, par conséquent, le blocage de la animations lorsque vous essayez seulement d'animer sur terminer.
Au lieu de cela, mettre en place un timer qui déclenche après 1/2 seconde que le coup d'envoi de la prochaine animation. La minuterie peut être réglée à l'arrivée de l'animation précédente, ce qui réduit la charge et de faire de votre taux de clignoter un peu plus régulièrement (mais vous aurez à comprendre ce qui est le plus approprié).
Voir le NSTimer de la classe de la documentation.
Noter que toute sorte de constante d'animation de ce genre de mettre un drain de la batterie. Pas énorme, par tout moyen, mais... encore...