2015-04-09 2 views
2
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]; 
+0

façon aki: arrêter des animations à temps = * animationDuration –

Répondre

1

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]; 
}); 
0

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!

+0

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

+0

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. –

1

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; 
0

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.