UIImageView多个图像之间的转换

时间:2014-06-04 15:46:19

标签: ios animation uiimageview objective-c-blocks

我使用以下代码在短时间内更改UIImageView的图像。正如您所见,正在使用的图像存储在一个数组中。

问题是,无论什么时间长短'或者'延迟'我设置,imageview几乎立即改变到数组中的最后一个图像。

我应该使用主线程在每次图像转换之间添加延迟吗?

////////////////////////////////////////////////////////////////

 animationCount = 0;
 imageArray =[NSMutableArray new];
 [imageArray addObject:[UIImage imageNamed:@"gauge1final.png"]];
 [imageArray addObject:[UIImage imageNamed:@"gauge2final.png"]];
 [imageArray addObject:[UIImage imageNamed:@"gauge3final.png"]];
 [imageArray addObject:[UIImage imageNamed:@"gauge4final.png"]];
 [imageArray addObject:[UIImage imageNamed:@"gauge5final.png"]];
 [self multiStageAnimate];

////////////////////////////////////////////////////////////////

-(void) multiStageAnimate{
[UIView animateWithDuration:5.0
                      delay:5.0
                    options:UIViewAnimationOptionTransitionCrossDissolve
                 animations:^
                 {
                     self.gauge.image = [imageArray objectAtIndex:animationCount];
                 }
                 completion:^(BOOL finished){

                     animationCount ++;

                     if(animationCount < imageArray.count){
                         [self multiStageAnimate];
                     }
                     else
                     {
                         animationCount = 0;
                     }
                 }];
}

3 个答案:

答案 0 :(得分:8)

UIImageView确实有一种机制可以满足您的需求。

UIImageView *imageView = [[UIImageView alloc] init];
imageView.animationImages = [NSArray arrayWithObjects:
                                           [UIImage imageNamed:@"image1"],
                                           [UIImage imageNamed:@"image2"],
                                           [UIImage imageNamed:@"image3"], nil];
imageView.animationRepeatCount = 0; // 0 means repeat without stop.
imageView.animationDuration = 1.5; // Animation duration

[imageView startAnimating];

答案 1 :(得分:0)

如果您使用具有相同动画的多个屏幕,最好创建一个 .plist 文件,然后在项目的任何位置使用它。步骤如下:

  1. 首先,生成一个.plist文件文件 - &gt;新文件 - &gt;资源 - &gt;属性列表

  2. 编写如下代码:

    ViewController.h

     @property (weak, nonatomic) IBOutlet UIImageView *dataImageView;
    

    <强> ViewController.m

    NSDictionary *picturesDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"PhotesArray" ofType:@"plist"]];
    NSArray *imageNames = [picturesDictionary objectForKey:@"Photos"];
    NSMutableArray *images = [[NSMutableArray alloc] init];
    for (int i=0; i<[imageNames count]; i++) {
        [images addObject:[UIImage imageNamed:[imageNames objectAtIndex:i]]];
    }
    //Normal animation
    self.dataImageView.animationImages = images;
    self.dataImageView.animationDuration = 5.0;
    [self.dataImageView startAnimating];
    

答案 2 :(得分:-2)

UIImageView的图像属性不会动画。你需要做的是将2个UIImageView小部件放在另一个之上。然后,您可以在每次转换时将其alpha属性从0设置为1(反之亦然)。