iOS中的3个图像之间的交叉淡入淡入淡出
我试图实现一个可以通过三个或更多图像重复循环的可点击图像。一旦循环设置完成,我不需要与图像进行交互。骑车是基于时间的,而不是基于事件的。图像应该平滑过渡。iOS中的3个图像之间的交叉淡入淡入淡出
解决此问题的最佳方法是什么?
我的第一种方法是使用单一方法的有限状态机,并使用该方法的选择器连锁UIView
动画块。由于[button setImage:nextImage forState:UIControlStateNormal]
没有动画,因此失败。
我的第二种方法是看CABasicAnimation
和图层。这似乎是一个更低层次的方法,但我看不到将过渡链接在一起的方式(例如,一旦此操作完成,就设置下一个动作)。
我的感觉是接近使用多个按钮并在它们之间淡化是明显错误的,但我不确定下一步该去哪里。
如何在UIButton
中的图像之间平滑淡化?
如何将这些转换链接在一起?
什么是正确的方法?
编辑: 的图像I1,I2,I3必要去序列I1 - > I2 - > I3 - > I2 - > I1 - > I2 - > I3等
我的解决办法:
- 有一个
UIButton
和容器UIView
。 - 容器
UIView
包含所有图像作为UIImageView
子视图。 - 在UIViewController的viewDidAppear方法中启动动画,其中所有子视图都将Alpha设置为1.0。然后将第0个imageView alpha设置为1.0。
- 完成动画播放后,请回想一下相同的方法,它会设置延迟
- 并照顾下一张图像的动画。
我不知道这是否是做事的正确方法,但它似乎是一个很多比其他整洁 -
- 所有的图像可以在Interface Builder中设置了无的任何污染代码中的图像名称。
- 该方法是自包含的,内存管理无忧无虑。
我首先想到的是UIImageView.animationImages
,但我认为它不支持褪色。
请勿使用UIButton
来显示图像;只要将它作为处理绘图的其他东西的顶部的隐形按钮即可。
要做动画的简单方法之一是使用两个图像视图:将“淡入”图像视图移动到前面(-[UIView bringSubviewToFront:]
)将其alpha设置为0,然后将其alpha设置为1。
我相当确信这样的事情会工作:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[button setImage:whicheverImage forState:UIControlStateNormal];
[UIView commitAnimations];
应该淡出顺畅通过,如果你给它的,也许0.5(秒)的持续时间。
有一些操作不会按预期设置动画,例如, button.hidden = YES; setImage及其相关属性是另一个。 – jamesh 2010-07-05 09:41:11
很高兴知道 - 抱歉的错误信息。 – Luke 2010-07-07 19:01:13