wat je veux est de montrer une image dans la vue de l'image et de fondu l'image après 5 secondes et d'afficher l'image suivante. Les images sont stockées dans un objet de tableau ... J'ai pu effectuer une transition réussie entre les images après 5 secondes.Qu'est-ce que je veux, c'est de fadeout la première image après 5 secondes et d'afficher le suivant, cela doit arriver dans une boucle infinie ... ci-dessous est le code et ça fonctionne vraiment bien pour la transition normale entre les images..wat je veux Fading des images ... et devaient ajouter une transition de décomposition dans le code ci-dessous
- (void)viewDidLoad {
imgView.animationImages=[NSArray arrayWithObjects:
[UIImage imageNamed:@"lori.png"],
[UIImage imageNamed:@"miranda.png"],
[UIImage imageNamed:@"taylor.png"],
[UIImage imageNamed:@"ingrid.png"],
[UIImage imageNamed:@"kasey.png"],
[UIImage imageNamed:@"wreckers.png"], nil];
imgView.animationDuration=20.0;
imgView.animationRepeatCount=0;
[imgView startAnimating];
[self.view addSubview:imgView];
[imgView release];
[super viewDidLoad];
}
3 Réponses :
Vous pouvez utiliser un NSTIMER répété pour appeler une méthode spéciale qui anime la propriété Alpha Vues de l'image de 0,0 à 1,0 en continu. Voici un certain code que j'ai écrit qui fonctionne:
- (void)viewDidLoad {
imgView.animationImages=[NSArray arrayWithObjects:
[UIImage imageNamed:@"lori.png"],
[UIImage imageNamed:@"miranda.png"],
[UIImage imageNamed:@"taylor.png"],
[UIImage imageNamed:@"ingrid.png"],
[UIImage imageNamed:@"kasey.png"],
[UIImage imageNamed:@"wreckers.png"], nil];
imgView.animationDuration=20.0;
imgView.animationRepeatCount=0;
[imgView startAnimating];
[self.view addSubview:imgView];
[imgView release];
//The timers time interval is the imageViews animation duration devided by the number of images in the animationImages array. 20/5 = 4
NSTimer *timer = [NSTimer timerWithTimeInterval:4.0
target:self
selector:@selector(onTimer)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[timer fire];
[super viewDidLoad];
}
//It is important that the animation durations within these animation blocks add up to 4
//(the time interval of the timer). If you change the time interval then the time intervals
//in these blocks must also be changed to refelect the amount of time an image is displayed.
//Failing to do this will mean your fading animation will go out of phase with the switching of images.
-(void)onTimer{
[UIView animateWithDuration:3.0 animations:^{
imgView.alpha = 0.0;
}];
[UIView animateWithDuration:1.0 animations:^{
imgView.alpha = 1.0;
}];
}
Les deux animations commenceraient-elles immédiatement et simultanément, n'est-ce pas? Vous feriez mieux d'utiliser des animations: Animations: Achèvement: où la deuxième animation est tirée à la fin de la première animation. Et j'ai défini des durées d'animation afin qu'elle correspond à la durée de l'image de l'image de l'imageView. Ou changez des images manuellement dans la méthode Ontimer, ce qui est préférable s'il anime du code de toute façon.
@saman: J'ai essayé le code ci-dessus, j'ai pu obtenir l'effet de décomposition. Ce que je veux, c'est la première image de disparaître et montrant le prochain et le second fade montrent le prochain .... etc wat im obtenus se décolore de la première image transition soudaine de la seconde puis une seconde image décolorant après que certains millisecondes montrent toujours la deuxième image Den transition soudaine du troisième ... cud u m'aidez-moi à sortir
Voulez-vous dire que lorsque l'image actuelle s'estompe, vous voulez que la prochaine image s'estompa? Pour que cela ne disparaisse pas en blanc, il s'estompe directement dans la prochaine image?
yup .... la chose wat i m obtention est la première image s'efface ..à la prochaine image de Soudain. La deuxième image s'estompe au blanc et montre le troisième après 2 millisecondes
Vous avez besoin de deux vues d'image, une sur le dessus de l'autre, de sorte que lorsque la vue la plus élevée de l'image s'efface sur la vue de l'image sur la couche ci-dessous apparaît.
Comment devrais-je commencer par .. Si je suis de mettre en place avec deux vues d'image ... coz j'ai stocké toutes mes images dans un tableau
user652878 Ceci répond à votre question concernant la décomposition d'une image à l'image à la suivante:
Créez les propriétés suivantes dans votre affichage Header: P>
int topIndex = 0, prevTopIndex = 1;
- (void)viewDidLoad {
imageViewBottom = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,480)];
[self.view addSubview:imageViewBottom];
imageViewTop = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,480)];
[self.view addSubview:imageViewTop];
imageArray = [NSArray arrayWithObjects:
[UIImage imageNamed:@"lori.png"],
[UIImage imageNamed:@"miranda.png"],
[UIImage imageNamed:@"taylor.png"],
[UIImage imageNamed:@"ingrid.png"],
[UIImage imageNamed:@"kasey.png"],
[UIImage imageNamed:@"wreckers.png"], nil];
NSTimer *timer = [NSTimer timerWithTimeInterval:5.0
target:self
selector:@selector(onTimer)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[timer fire];
[super viewDidLoad];
}
-(void)onTimer{
if(topIndex %2 == 0){
[UIView animateWithDuration:5.0 animations:^
{
imageViewTop.alpha = 0.0;
}];
imageViewTop.image = [imageArray objectAtIndex:prevTopIndex];
imageViewBottom.image = [imageArray objectAtIndex:topIndex];
}else{
[UIView animateWithDuration:5.0 animations:^
{
imageViewTop.alpha = 1.0;
}];
imageViewTop.image = [imageArray objectAtIndex:topIndex];
imageViewBottom.image = [imageArray objectAtIndex:prevTopIndex];
}
prevTopIndex = topIndex;
if(topIndex == [imageArray count]-1){
topIndex = 0;
}else{
topIndex++;
}
}
@samanb: Dude Hats Off.. Travaillé bien ... mais la chose est après la troisième image que l'application quitte..cud u aidez-moi wid dis
Pouvez-vous s'il vous plaît coller la pile d'appels et l'erreur que vous obtenez quand il se bloque. Sans qu'il n'y a presque rien que je puisse faire pour vous aider.
Samanb: Il y a une erreur ou un crash dans la console..ensipe JST qu'il affiche parfaitement les 3 images, puis quitte
Vous n'avez aucune erreur dans la console? Ce code fonctionne bien pour moi, vérifiez que tous les noms de fichier image sont corrects, si vous avez une erreur dans une chaîne, cela entraînera le crash du programme. Vérifiez la 4ème image dans le tableau car elle affiche la première 3 fine.
@saman: mec long time no see ... J'ai essayé le code ci-dessus pour 3 images L'application bloque une erreur dans la console que NSInvalidargumentException- [NSCFString ObjectAindex:]: Sélecteur non reconnu envoyé à l'instance 0x5e..cud u aidez-moi.
Salut. Pouvez-vous m'envoyer un email votre code s'il vous plaît? Juste ce qui est dans ViewDidLoad () Mon email est sur mon profil.
cud u envoyez-moi votre email si..der est seulement un lien de site Web
mec ... u ve obtenir le site Web de votre entreprise ... www.innovation-stream.com .... der n'est pas d'identifiant de messagerie
mec, j'ai pu résoudre le tableau d'image de bug..I DINT DINCE dans DealLoc, car le tableau d'images est AutorAlease ... il accède à la poubelle La transition fonctionne bien mais a eu un autre problème ...
c'est comme Dis ... J'ai placé une vue de table dans UiviewController et au-dessus de la tableView im fait la décoloration des images..im obtenant la transition de décomposition infiniment mais la vue entière est gelée..Si im pour utiliser une nsopération ou (filetage) de la fondue ci-dessus des images..im Obtenir la transition des deux premières images jusqu'à ce que les données Web sont chargées dans la vue Table de la table ..Après que la webData est chargée dans la vue de tableau La transition de la fabation est stoppée et la vue gelée est libérée (je suis capable de trucs de table ACSESS) ... wat je veux que la décoloration des images se produise infinisly à la fois accéder à d'autres choses
@Sabobin, je me demande simplement lorsque le topindex commence à 0, il suffit de revenir sans animation, de toute façon pour résoudre le problème?
Voici ce qui a fonctionné pour moi lorsque je voulais animer un ensemble de messages comme images de l'utilisateur. Peu importe le nombre d'images que vous avez ce code tournera à travers eux.
[self.messageBottom = [[UIImageView alloc] initWithFrame:CGRectMake(289, 262, 171, 38)];
[self addSubview:messageBottom];
[messageBottom setAlpha:0.0];
[messageBottom release];
self.messageTop = [[UIImageView alloc] initWithFrame:CGRectMake(289, 262, 171, 38)];
[self addSubview:messageTop];
[messageTop setAlpha:1.0];
[messageTop release];
self.messageImgsArray =[NSArray arrayWithObjects:
[UIImage imageNamed:@"image1.png"],
[UIImage imageNamed:@"image2.png"],
[UIImage imageNamed:@"image3.png"],
[UIImage imageNamed:@"image4.png"],
[UIImage imageNamed:@"image5.png"],nil];
topIndex = 0, bottomIndex = 1;
[messageTop setImage:[messageImgsArray objectAtIndex:topIndex]];
//The timers time interval is the imageViews animation duration devided by the number of images in the animationImages array. 20/5 = 4
NSTimer *timer = [NSTimer timerWithTimeInterval:2.0
target:self
selector:@selector(onTimer)
userInfo:nil
repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}
-(void)onTimer{
[UIView animateWithDuration:1 animations:^{
//set the image of the image that is not currently visible
if (messageTop.alpha == 0) {
[messageTop setImage:[messageImgsArray objectAtIndex:topIndex]];
}
if (messageBottom.alpha == 0) {
[messageBottom setImage:[messageImgsArray objectAtIndex:bottomIndex]];
}
//make sure the images rotate
[messageTop setAlpha:messageTop.alpha == 0 ? 1 : 0];
[messageBottom setAlpha:messageBottom.alpha == 0 ? 1 : 0];
//make sure the images play in a loop
topIndex = topIndex < [messageImgsArray count]-1 ? bottomIndex+1 : 0;
bottomIndex = bottomIndex < [messageImgsArray count]-1 ? bottomIndex+1 : 0;
}];
}
Comment puis-je l'arrêter après i.e 3 fois?