淡出/淡入 UiView 动画

Posted

技术标签:

【中文标题】淡出/淡入 UiView 动画【英文标题】:Fade Out/In UiView Animation 【发布时间】:2015-03-27 15:43:32 【问题描述】:

我正在使用 Swift。

我有一个名为fadeButtonsOut 的函数,它会在我的游戏结束时被调用。我有一组 UIButtons(图块),我想先淡出然后再淡入。

函数是:

    func fadeButtons()

        var tileArrayCopy = tileArray

        for index in 0..<tileArrayCopy.count

            UIView.animateWithDuration(1.5, 
                                  delay: 0, 
                                  options: UIViewAnimationOptions.CurveLinear, 
                                  animations: 
                  tileArrayCopy[index].alpha = 0
                  , completion:  (Bool) -> Void in

                UIView.animateWithDuration(1.5,
                                            animations: 
                    tileArrayCopy[index].alpha = 1
                   , completion: nil)
          )
     

问题是fadeOut 动画被fadeIn 动画覆盖。基本上淡出立即发生然后淡入正常动画。我把fadeIn放在fadeOut的完成中,为什么会这样?我希望 FadeOut 进行动画处理,然后在 fadeOut 完成后让 fadeIn 进行动画处理。

【问题讨论】:

【参考方案1】:

您发布的代码看起来很合理,但它是在一组视图(按钮?)中的单个条目上运行的

它使用实例变量索引?我假设您有一个循环重复调用此方法?

实例变量的处理可能是你的问题。使函数采用 int 参数作为索引,并重写您的动画代码以使用它。然后让你的循环传入索引。

func fadeButtonsOut(tileIndex: Int)

  UIView.animateWithDuration(
    1.5, 
    delay: 0, 
    options: UIViewAnimationOptions.CurveLinear, 
    animations: 
    
      tileArrayCopy[tileIndex].alpha = 0
    , 
    completion: 
     
      (Bool) -> Void in
      UIView.animateWithDuration(1.5, 
        animations: 
        
          tileArrayCopy[tileIndex].alpha = 1
        , 
        completion: nil)
    )

然后这样称呼它:

for tileIndex in 1..tileArrayCopy.count

  fadeButtonsOut(tileIndex)

顺便说一句,空白是你的朋友。不要将 10 吨代码塞进一行。它使代码非常难以阅读。

【讨论】:

我已经更新了问题,以提供fadeButtonsOut 函数中的所有代码。能否请您再看看它可能出了什么问题? 您需要展示变量索引是如何定义/更改的,以及调用您的方法的代码。

以上是关于淡出/淡入 UiView 动画的主要内容,如果未能解决你的问题,请参考以下文章

Android 创建淡入淡出动画的详解

如何控制两个 UIImage 的无动画之间的淡入淡出?

jquery总结06-动画事件03-淡入淡出效果

jQuery动画(显示隐藏,淡入淡出,滑动)

复制 iBooks 缩放/淡入淡出动画

ListView的淡入淡出和Activity的淡入淡出补间动画效果Animation