2016-01-24 39 views
-1

当按下按钮时,我使用下面的代码将标签滑动到屏幕上,但它没有效果。当按下按钮时使用animateWithDuration但它没有效果(swift 2)

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... 

我测试过这是怎么回事以1固定α,但标签只是保持它是并按下按钮时不动。我错过了什么?

+0

为什么你有两行代码改变self.summaryLabel.center –

+0

我试图将按钮按下时,将标签(即alpha = 0)从屏幕上移开,然后将其带到视图中以2第二个动画 – Hikul

+0

将第一行移动到动画块之外。或者创建两个不同的动画,但要小心第二个应该在第一个完成后才会发生 –

回答

0

几件事情:

首先,你的两个更改视图的中心相互抵消。动画在一个动画中应用动画块内的全部更改。如果最终结果没有变化,则不应用更改。正如Ramy在他的评论中所说的,你需要两个动画,定时,所以第二个动画要在第一个动画完成后进行,或者你需要在动画开始之前应用第一个动画。我建议先从一个单独的动画开始,然后开始一个动画。

第二个问题:视图控制器默认使用自动布局。使用自动布局,您无法直接为视图的位置设置动画。它不能可靠地工作。相反,您必须对视图进行约束,将其连接到插座,然后通过更改常量并在动画块内调用layoutIfNeeded()来动态更改约束的常量值。在动画块内对layoutIfNeeded()的调用会导致视图的位置发生变化,并且由于它位于动画块内部,因此将使用动画应用更改。

相关问题