NSArray *imageNames = @[@"2_00000.png", @"2_00001.png", @"2_00002.png", @"2_00003.png",
@"2_00004.png", @"2_00005.png", @"2_00006.png", @"2_00007.png",
@"2_00008.png", @"2_00009.png", @"2_00010.png", @"2_00011.png",
@"2_00012.png", @"2_00013.png", @"2_00014.png", @"2_00015.png",
@"2_00016.png", @"2_00017.png", @"2_00018.png", @"2_00019.png",
@"2_00020.png", @"2_00021.png", @"2_00022.png", @"2_00023.png",
@"2_00024.png", @"2_00025.png", @"2_00026.png", @"2_00027.png",
@"2_00028.png", @"2_00029.png", @"2_00030.png", @"2_00031.png",
@"2_00032.png", @"2_00033.png", @"2_00034.png", @"2_00035.png",
@"2_00036.png", @"2_00037.png", @"2_00038.png", @"2_00039.png",
@"2_00040.png", @"2_00041.png", @"2_00042.png", @"2_00043.png",
@"2_00044.png", @"2_00045.png", @"2_00046.png", @"2_00047.png",
@"2_00048.png", @"2_00049.png", @"2_00050.png", @"2_00051.png",
@"2_00052.png", @"2_00053.png", @"2_00054.png", @"2_00055.png",
@"2_00056.png", @"2_00057.png", @"2_00058.png", @"2_00059.png",
@"2_00060.png", @"2_00061.png", @"2_00062.png", @"2_00063.png"];
NSMutableArray *images = [[NSMutableArray alloc] init];
for (int i = 1; i < imageNames.count; i++) {
[images addObject:[UIImage imageNamed:[imageNames objectAtIndex:i]]];
}
// Normal Animation
UIImageView *animationImageView = [[UIImageView alloc] initWithFrame:CGRectMake(-6, 40, 200, 1034)];
animationImageView.animationImages = images;
animationImageView.animationDuration = 2;
animationImageView.animationRepeatCount = 0;
[self.view addSubview:animationImageView];
[animationImageView startAnimating];
Répondre
d'abord définir la animationRepeatCount à 1, et après le début de l'animation de créer un bloc qui se déclenche après la durée de l'animation dans ce bloc définir l'image de animationImageView à la dernière image.
dispatch_time_t dispatchAfter = dispatch_time(DISPATCH_TIME_NOW, animationImageView.animationDuration * NSEC_PER_SEC);
dispatch_after(dispatchAfter, dispatch_get_main_queue(), ^(void){
animationImageView.image = [images lastObject];
});
Vous pouvez utiliser transitionWithView:duration:options:animation:completion:
de UIView
pour animer votre UIImageView
.
- (void)animatePictureTransition:(NSMutableArray *)arrayImages{
[UIView transitionWithView:imageViewButton
duration:1.0
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^{
UIImage *newImage = (UIImage *)arrayImages.firstObject;
imageViewButton.image = newImage;
} completion:^(BOOL finished){
[arrayImages removeObjectAtIndex:0];
if(arrayImages.count) {
[self animatePicturesTransition:arrayImages];
}
}];
}
Vous pouvez utiliser cette récursive et appeler à nouveau la méthode dans le blog d'achèvement et de passer à travers la UIImages
cette façon reste il ne devrait pas être un problème pour arrêter au dernier UIImages
.
Je recommande aussi vous, pour charger le UIImages
dynamiquement à partir du dossier des ressources de cette façon:
- (NSMutableArray *)getImagesWithSuffix:(NSString *)start andEndSuffix:(NSString *)end{
NSMutableArray *imageArray = [[NSMutableArray alloc] init];
for (int i = 1; i < 100; i++) {
NSString *fileName = [NSString stringWithFormat:@"%@%d%@.png", start, i, end];
if([self fileExistsInProject:fileName]){
[imageArray addObject:[UIImage imageNamed:fileName]];
} else {
break;
}
}
return imageArray;
}
écrit toujours tous les noms de votre UIImages
prend beaucoup de temps et peut causer des problèmes. De cette façon, il vous suffit de commander vos photos pour pouvoir faire une boucle.
Pour utiliser ce code, créez un category
de NSMutableArray
et vous pouvez l'utiliser!
nombre d 'image @ m.eldehairy: Merci, il a travaillé kindda, mais l'animation ne fonctionne pas son juste en affichant la dernière image. Est-ce leur toute autre méthode d'animation image seq qui va arrêter et afficher la dernière image. Pouvez-vous l'expliquer pas à pas. Merci – MercuryUIX
répéter des animations sont toujours un peu difficile. Vous ne pouvez pas les boucler à l'intérieur d'une boucle for, vous devez gérer cela dans le bloc d'achèvement car c'est le seul endroit où vous savez que l'animation s'est vraiment arrêtée. –
Si vous connaissez le animationRepeatCount
avant de commencer l'animation
animationImageView.animationRepeatCount = 1 //For 1 loop
animationImageView.image = animationImageView.animationImages.lastObject;
Pour l'animation dynamique stoping
animationImageView.animationRepeatCount = 0 //infinite loop
Lorsque vous avez besoin d'arrêter l'animation
[animationImageView stopAnimating];
animationImageView.image = animationImageView.animationImages.lastObject;
problème est avec cette ligne ..
animationImageView.animationRepeatCount = 0;
en réglant animationRepeatCount = 0 son ensemble à l'infini par défaut. si tu veux l'arrêter enfin l'image que vous pouvez aller avec
animationImageView.animationRepeatCount = 1; // specify no of times u need to run your animation.
façon aki: arrêter des animations à temps = * animationDuration –