【问题标题】:Swift UIView.animateWithDuration disregards animation code at timesSwift UIView.animateWithDuration 有时会忽略动画代码
【发布时间】:2015-06-21 18:02:35
【问题描述】:

我正在尝试为 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)")
})

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

当动画出错时,前两个 println 显示动画之前的盒子中心 CGPoint,第三个 println(在动画块内)显示盒子的中心已设置为视图的中心,但是当我们到达 println在完成块中,盒子已经回到原来的中心点(动画也是如此,将盒子缩小到适当的位置,而不是将其移动到中心)

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

什么会导致动画块中设置盒子中心点的代码在我们到达完成块时被忽略?

没有其他代码可以设置动画或更改我尝试设置动画的框的框架或位置。

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

【问题讨论】:

    标签: xcode swift animation uiview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多