我有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;
};
答案 0 :(得分:1)
有些注意事项:
1)你在每个转换之间没有延迟的循环上同步执行所有操作,在下一个循环中动画一个if是没有意义的,它将被下一个循环替换,依此类推,直到最后一个2.此外,您每次都将imageView
添加为子视图,也是不必要的。
2)您正在更改imageView
的.image属性,然后更改图层的内容。不妨使用UIView并具有相同的效果。
我的建议是制作一种从一张图片切换到下一张图片的方法,并让NSTimer
每隔x秒调用一次这个函数,直到你完全通过它们为止。
编辑:未来:
self.imageview.backgroundColor = [UIColor blackColor];
self.imageview.clipsToBounds = YES;
完全没必要:)
.backgroundColor
被您正在显示的UIImage
吸引。
.clipsToBounds
是UIImageView
的默认行为(它会缩小/扩展您的图片尺寸,但不会在外面吸引)