在iOS上的UIButton中的3个图像之间的交叉淡化

时间:2010-06-28 11:35:16

标签: iphone uibutton transition

我正在尝试实现一个能够反复循环显示三个或更多图像的可点击图像。一旦设置了循环,我就不需要与图像交互。骑自行车是基于时间的,而不是基于事件的。图像应该平滑地从一个过渡到另一个。

解决此问题的最佳方法是什么?

我的第一种方法是在单个方法中使用有限状态机,并且链UIView动画使用该方法的选择器阻塞在一起。由于[button setImage:nextImage forState:UIControlStateNormal]未设置动画,因此失败。

我的第二种方法是查看CABasicAnimation和图层。这似乎是一种更低级别的方法,但我看不到将转换链接在一起的方法(例如,一旦完成此操作就设置下一个动作)。

我的直觉是,接近使用多个按钮并在它们之间消失是完全错误的,但我不知道下一步该去哪里。

如何在UIButton中的图像之间平滑淡出?

如何将这些过渡链接在一起?

什么是正确的方法?

修改 图像i1,i2,i3需要按顺序i1 - > i2 - > i3 - > i2 - > i1 - > i2 - > i3等

3 个答案:

答案 0 :(得分:4)

我的第一个想法是UIImageView.animationImages,但我不认为它支持褪色。

请勿使用UIButton来显示图像;只需将它作为处理绘图的其他内容的隐藏按钮。

执行所需动画的一种简单方法是使用两个图像视图:将“淡入”图像视图移动到前面(-[UIView bringSubviewToFront:])将其alpha设置为0,然后为其alpha设置动画到1。

答案 1 :(得分:0)

我的解决方案:

  • 拥有UIButton和容器UIView
  • 容器UIView包含所有图片UIImageView子视图。
  • 在UIViewController的viewDidAppear方法中启动动画,其中所有子视图都将alpha设置为1.0。然后将第0个imageView alpha设置为1.0。
  • 完成此动画后,请调用设置延迟的相同方法
  • 并负责动画到下一张图像。

我不确定这是否是正确的做事方式,但它似乎比其他方式更整洁 -

  • 可以在Interface Builder中设置所有图像,而不会污染代码中的图像名称。
  • 该方法是自包含的,内存管理无忧无虑。

答案 2 :(得分:-3)

我很确定这样的事情会奏效:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];

[button setImage:whicheverImage forState:UIControlStateNormal];

[UIView commitAnimations];

如果你给它的持续时间可能是0.5(秒),它应该顺利淡出。