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(秒)的持续时间。

+1

有一些操作不会按预期设置动画,例如, button.hidden = YES; setImage及其相关属性是另一个。 – jamesh 2010-07-05 09:41:11

+0

很高兴知道 - 抱歉的错误信息。 – Luke 2010-07-07 19:01:13