【问题标题】:Crossfading between 3 images in a UIButton, on iOS在 iOS 上的 UIButton 中的 3 个图像之间交叉淡入淡出
【发布时间】:2010-06-28 11:35:16
【问题描述】:

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

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

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

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

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

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

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

什么是正确的方法?

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

【问题讨论】:

    标签: iphone uibutton transition


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我的解决方案:

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

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

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

      【讨论】:

        【解决方案3】:

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

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:duration];
        
        [button setImage:whicheverImage forState:UIControlStateNormal];
        
        [UIView commitAnimations];
        

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

        【讨论】:

        • 有些操作的动画效果不如预期,例如button.hidden = YES; setImage 及其相关属性是另一个。
        猜你喜欢
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        • 2016-01-02
        • 2021-05-29
        相关资源
        最近更新 更多