J'ai un tableau noir d'UIImageViews que je veux faire défiler et passer rapidement d'un état «allumé» à un autre «éteint». J'ai écrit le code pour le faire dans une boucle for au lieu d'une méthode qui a été appelée lorsque l'utilisateur a tapé un UIButton (l'action du bouton).Permutation d'images UIImageView dans une boucle
est ici que la boucle:
for(int i = 0; i < [Images count]; i++) {
if(i > 0){
[self toggleImageViewOff:[Images objectAtIndex:i - 1]];
}
[self toggleImageViewOn:[Images objectAtIndex:i]];
[NSThread sleepForTimeInterval:0.5f];
}
L'interface utilisateur n'a pas mis à jour comme je m'y attendais que je ne ai vu que la dernière UIImageView dans la « marche ». J'ai pensé que la mise à jour du dessin des vues devait se produire dans le thread principal dans lequel ce code s'exécutait aussi. J'ai donc appris à propos de performSelectorInBackground: withObject:. L'exécution des méthodes toggleImageViewOn/Off en utilisant ceci a fait fonctionner la boucle. Le problème est que si je rends l'intervalle de sommeil trop court, je peux avoir une mise à jour "on" après un "off" avec des Threads fonctionnant dans le désordre. J'ai donc eu la brillante idée de déplacer toute la boucle avec le sommeil dans sa propre méthode et de l'appeler depuis la méthode d'action en utilisant performSelectorInBackground: withObject:. J'ai essayé cela et je suis de retour à ne pas avoir une vue à jour jusqu'à ce que la boucle soit terminée.
C'est une de longue haleine façon d'arriver à ma question:
Quelle est la meilleure façon d'animer ce pour garantir les feux de code sur/off dans le bon ordre et obtenir encore des mises à jour de vue, même à des vitesses élevées? (c'est-à-dire en boucle très rapidement)
J'ai essayé de penser à comment je le ferais avec CoreAnimation, mais je n'arrive pas à comprendre comment le faire.
pour le bonus, voici les méthodes de Toggle:
- (void)toggleImageViewOn:(UIImageView *)theImageView {
[theImageView setImage:[UIImage imageNamed:@"on.png"]];
}
- (void)toggleImageViewOff:(UIImageView *)theImageView {
[theImageView setImage:[UIImage imageNamed:@"off.png"]];
}
Bill, J'ai essayé autour de la boucle avec [UIView beginAnimations: @ contexte "animation": nil]; et [UIView commitAnimations]; Mais cela n'a pas eu d'effet. Tout ce que je vois est une énorme pause dans l'interface utilisateur tandis que la boucle va et puis "bang", juste la dernière image est "sur". –
hm, imageview ne doit pas animer sa propriété 'image' je suppose, bummer. Vous pouvez envisager d'utiliser des calques ici car ils animent la modification du contenu (avec un fondu enchaîné par défaut). Ou vous pouvez faire la chose vue "recommandée" et ajouter un "aperçu" qui contiendrait soit l'affichage de l'image on ou off –
cool Bill Dudney est sur SO maintenant. bienvenue à bord j'aime vraiment votre livre sur iPhone dev. –