重叠UIView动画取消第一个完成块

时间:2016-02-09 03:53:24

标签: swift animation

我有两个按钮来移动视图。当我按下第一个按钮时,它将移动一个视图,另一个将移动它。

第一个动画有一个完成块,但我希望在完成完成之前用户将视图移回时阻止此块执行。

我尝试过使用与此类似的其他问题的解决方案,但似乎并没有停止执行第一个完成块。

=INDEX(INDIRECT(E3&"!F5:M84"),MATCH(B3,INDIRECT(E3&"!A5:A84"),0),MATCH(A6,INDIRECT(E3&"!F3:M3"),0))

我也尝试删除所有动画,而完成参数将为false,但动画只会跳到最后并从那里动画。

非常感谢任何想法。

2 个答案:

答案 0 :(得分:0)

您可以使用布尔标志来实现所需的功能,如下所示:

var moveViewFlag = false var moveBackFlag = false

@IBOutlet func moveView(sender: AnyObject) {
UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0, options: .AllowUserInteraction, animations: { /* animation */ }) { _ in /* completion */ 

        //inside completion block make the moveBackFlag to true
        moveBackFlag = true
   }
}



@IBOutlet func moveBack(sender: AnyObject) {
UIView.animateWithDuration(0.0, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0, options: .BeginFromCurrentState, animations: { /* animation */ }) { _ in /* completion */ 
    //inside completion block make the moveBackFlag to true
        moveViewFlag = true

       if moveBackFlag{
          //do whatever you want to do!
       }
}
}

希望这有帮助。

您应该创建一个自定义类并在类中处理它以避免混乱的标志。

答案 1 :(得分:0)

经过一段时间的搜索,我想我找到了解决方案。要使完成块返回false,必须删除动画。但通过这样做,动画将跳转到“结束状态”,以防止我使用:

object.layer.frame = object.layer.presentationLayer()!.frame
object.layer.removeAllAnimations()

从这里我可以开始我的新动画(移回对象)而不用担心第一个动画的完成块。 Information

我不确定这是不是应该怎么做,或者是否有更好的方法。