我正在使用以下代码在按下按钮时将标签滑动到屏幕上,但它没有效果。
override func viewDidLayoutSubviews() {
summaryLabel.alpha = 0
}
@IBAction func searchButton(sender: AnyObject) {
UIView.animateWithDuration(2) { () -> Void in
self.summaryLabel.center = CGPointMake(self.summaryLabel.center.x - 400, self.summaryLabel.center.y)
self.summaryLabel.alpha = 1
self.summaryLabel.center = CGPointMake(self.summaryLabel.center.x + 400, self.summaryLabel.center.y)
}
//button code continues...
我已经通过将alpha固定为1来测试了正在发生的事情,但是标签只是保持原样并且在按下按钮时不会移动。我错过了什么?
答案 0 :(得分:0)
有几件事:
首先,您对视图中心的两次更改会相互抵消。动画在一个动画中应用动画块内的全部更改。如果最终结果没有变化,则不应用任何更改。正如Ramy在他的评论中所说,你要么需要2个动画,要么定时,所以第二个动画在第一个完成之后发生,或者你需要在动画开始之前应用第一个变化。我建议从单个更改和单个动画开始,然后先使用它。
第二个问题:视图控制器默认使用自动布局。使用自动布局,您无法直接为视图的位置设置动画。它不能可靠地工作。相反,您必须在视图上设置约束,将其连接到插座,并通过更改常量并在动画块内调用layoutIfNeeded()
来动画更改约束的常量值。动画块内部对layoutIfNeeded()
的调用会导致视图的位置发生变化,并且由于它位于动画块内部,因此应用动画进行更改。