淡出/在UiView动画中

时间:2015-03-27 15:43:32

标签: ios swift uiview uiviewanimation

我正在使用Swift。

我有一个名为fadeButtonsOut的函数,当我的游戏结束时会调用它。我有一个UIButtons(tile)数组,我想fadeOut然后fadeIn。

功能是:

    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动画正在覆盖fadeOut动画。基本上fadeOut瞬间发生,然后fadeIn正常动画。我把fadeIn放到了fadeOut的完成中,为什么会这样呢?我希望FadeOut在fadeOut完成后动画然后将fadeIn设置为动画。

1 个答案:

答案 0 :(得分:0)

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

它使用实例变量索引?我假设你有一个循环,反复调用这个方法?

实例变量的处理可能是你的问题。使该函数为索引获取一个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吨代码塞进一行。它使代码很难阅读。

相关问题