Swift UIView.animateWithDuration有时会忽略动画代码

时间:2015-06-21 18:02:36

标签: xcode swift animation uiview

我试图让UIButton动画缩小并移动到视图的中心。此动画在正确运行与否之间交替。如果它没有正确运行,它将忽略将UIButton发送到中心的呼叫,并且仅缩小视图。

动画代码:

println("before send box center \(self.box1.center) to middle \(self.view.center)")

UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
     println("1 send box center \(self.box1.center) to middle \(self.view.center)")

     self.box1.center = self.view.center                
     self.box1.transform = CGAffineTransformMakeScale(0.0001, 0.0001)

     println("2 send box center \(self.box1.center) to middle \(self.view.center)")
}, completion: { finished in
     println("final box center \(self.box1.center) to middle \(self.view.center)")
})

当动画正确运行时,前两个printlns在动画前显示框的中心CGPoint,最后两个printlns显示视图的中心CGPoint,现在也是框'中心点。

当动画混乱时,前两个printlns在动画前显示框的中心CGPoint,第三个println(在动画块内)显示框的中心已设置为视图&# 39; s中心,但是当我们到达完成程序段中的println时,该框已经返回到其原始中心点(并且动画也是如此,将框缩小到位,而不将其移动到中心)

什么可以导致相同的动画代码在跟随代码和忽略代码之间切换?

在我们到达完成区块的时候,动画块中设置方框中心点的代码会被忽略的原因是什么?

没有其他代码动画或更改我试图制作动画的框的框架或位置。

我尝试过添加UIViewAnimationOptions.OverrideInheritedCurve和。 AllowAnimatedContent和.BeginFromCurrentState以及.AllowUserInteraction希望找到引起问题的故障,但这些都没有对代码的执行方式或动画的显示方式产生任何影响。

1 个答案:

答案 0 :(得分:0)

我打赌你在Storyboard / XIB中选中了“Use AutoLayout”。使用AutoLayout时,您必须以不同方式进行动画制作。您应该为这些设置添加约束,并将IBOutlet连接到这些约束,而不是更改视图的框架或中心。

然后在动画代码中更改约束的常量值。然后在layoutIfNeeded()上致电self.view