0

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

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

我的第一种方法是单一方法中的有限状态机,并UIView使用该方法的选择器将动画块链接在一起。这失败了,因为[button setImage:nextImage forState:UIControlStateNormal]没有动画。

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

我的直觉认为使用多个按钮并在它们之间淡出是完全错误的,但我不确定下一步该去哪里。

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

我如何将这些转换链接在一起?

什么是正确的方法?

编辑: 图像 i1、i2、i3 需要按顺序 i1 -> i2 -> i3 -> i2 -> i1 -> i2 -> i3 等

4

3 回答 3

4

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

不要使用 aUIButton来显示图像;只需将其设置为处理绘图的其他东西之上的不可见按钮即可。

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

于 2010-06-28T11:55:14.453 回答
0

我的解决方案:

  • 有一个UIButton和一个容器UIView
  • 该容器UIView包含所有图像作为UIImageView子视图。
  • 在 UIViewController 的 viewDidAppear 方法中启动动画,其中所有子视图的 alpha 设置为 1.0。然后将第 0 个 imageView alpha 设置为 1.0。
  • 当这个动画完成时,调用同样的方法,它设置了一个延迟
  • 并负责为下一张图像制作动画。

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

  • 所有图像都可以在 Interface Builder 中设置,而不会污染代码中的图像名称。
  • 该方法是独立的,并且内存管理无忧。
于 2010-06-28T22:30:22.570 回答
-3

我相当确定这样的事情会起作用:

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

[button setImage:whicheverImage forState:UIControlStateNormal];

[UIView commitAnimations];

如果你给它大约 0.5(秒)的持续时间,它应该会顺利淡出。

于 2010-07-01T19:45:41.027 回答