在最后的图像停止UIimageviewanimation

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

首先将animationRepeatCount设置为1,并在开始animation之后创build一个块,在该块的animation持续时间之后,将animationImageView图像设置为最后一个图像。

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

如果在开始animationRepeatCount之前知道animationRepeatCount

 animationImageView.animationRepeatCount = 1 //For 1 loop animationImageView.image = animationImageView.animationImages.lastObject; 

dynamic停止animation

 animationImageView.animationRepeatCount = 0 //infinite loop 

当你需要停止animation

 [animationImageView stopAnimating]; animationImageView.image = animationImageView.animationImages.lastObject; 

你可以使用UIView transitionWithView:duration:options:animation:completion:来animation你的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]; } }]; } 

你可以使用这个recursion,并在完成博客中再次调用方法,并通过剩余的UIImages这样的方式应该不会有问题停在最后UIImages

我也build议你,以这种方式从资源文件夹dynamic加载UIImages

 - (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; } 

总是写你的UIImages所有名字需要很多时间,并可能导致任何问题。 这样你只需要订购你的照片,这样你就可以循环。

要使用这个代码,创build一个NSMutableArraycategory ,你可以使用它!

问题是这条线..

 animationImageView.animationRepeatCount = 0; 

通过设置animationRepeatCount = 0默认设置为无限。 如果你想要它停在最后的形象,你可以去

 animationImageView.animationRepeatCount = 1; // specify no of times u need to run your animation.