0

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

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;

};
4

1 回答 1

1

需要注意的一些事项:

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

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

我的建议是创建一种从一个图像交换到下一个图像的方法,并NSTimer每隔 x 秒调用一次该函数,直到您全部通过它们。

编辑:对于未来:

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

完全没有必要:)

.backgroundColorUIImage您正在显示的绘制。

.clipsToBounds是默认行为UIImageView(它将图像缩小/扩展至它的大小,但从不向外绘制)

于 2012-11-23T17:34:32.873 回答