UIImageView上的动画问题

时间:2012-11-23 17:22:44

标签: ios animation imageview

我有7个图像,我试图淡入/淡出1个ImageView。我已将所有图像存储在一个数组中,然后有一个循环显示每个图像并淡入下一个,但是,当我运行程序时,只显示最后两个图像。有关为什么会这样的想法?以及如何解决它?代码如下。

imageArray = [NSArray arrayWithObjects:
              [UIImage imageNamed:@"image 0.jpg"],
              [UIImage imageNamed:@"image 1.jpg"],
              [UIImage imageNamed:@"image 2.jpg"],
              [UIImage imageNamed:@"image 3.jpg"],
              [UIImage imageNamed:@"image 4.jpg"],
              [UIImage imageNamed:@"image 5.jpg"],
              [UIImage imageNamed:@"image 6.jpg"],
              nil];
            self.imageview.backgroundColor = [UIColor blackColor];
              self.imageview.clipsToBounds = YES;

int count = [imageArray count];
for (int i = 0; i <count-1 ; i++)
{
    UIImage *currentImage = [imageArray objectAtIndex: i];
    UIImage *nextImage = [imageArray objectAtIndex: i +1];
    self.imageview.image = [imageArray objectAtIndex: i];
    [self.view addSubview:self.imageview];
    CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
    crossFade.duration = 5.0;
    crossFade.fromValue = (__bridge id)(currentImage.CGImage);
    crossFade.toValue = (__bridge id)(nextImage.CGImage);
    [self.imageview.layer addAnimation:crossFade forKey:@"animateContents"];
    self.imageview.image = nextImage;

};

1 个答案:

答案 0 :(得分:1)

有些注意事项:

1)你在每个转换之间没有延迟的循环上同步执行所有操作,在下一个循环中动画一个if是没有意义的,它将被下一个循环替换,依此类推,直到最后一个2.此外,您每次都将imageView添加为子视图,也是不必要的。

2)您正在更改imageView的.image属性,然后更改图层的内容。不妨使用UIView并具有相同的效果。

我的建议是制作一种从一张图片切换到下一张图片的方法,并让NSTimer每隔x秒调用一次这个函数,直到你完全通过它们为止。

编辑:未来:

self.imageview.backgroundColor = [UIColor blackColor];
self.imageview.clipsToBounds = YES;

完全没必要:)

.backgroundColor被您正在显示的UIImage吸引。

.clipsToBoundsUIImageView的默认行为(它会缩小/扩展您的图片尺寸,但不会在外面吸引)