Swift 动画不工作

Posted

技术标签:

【中文标题】Swift 动画不工作【英文标题】:Swift Animation Not Working 【发布时间】:2016-03-19 02:53:47 【问题描述】:

一旦发生某些事情,我试图将 UILabel 和 UIButton 移动到我的应用程序的屏幕上,但是,当我使用动画来执行此操作时,它不起作用,并且当动画应该发生时,组件不要移动到屏幕上。这是动画的代码:

UIView.animateWithDuration(2)  () -> Void in
                    self.label.center = CGPointMake(self.view.center.x, self.label.center.y)
                    self.again.center = CGPointMake(self.view.center.x, self.again.center.y)
                

任何有关此问题的帮助将不胜感激!

【问题讨论】:

我们需要更多的上下文——你在哪里称呼它? 我同意@TroyT。我们还需要更多的代码。您是在故事板中创建对象吗? 不,我在 main.storyboard 中使用图形界面创建了它们,而不是以编程方式。在 viewDidLayoutSubviews 中,我让组件离开屏幕,然后每当执行某个事件时,我知道何时执行,组件应该被动画化回到屏幕上。 我可以发布我的整个故事板代码 【参考方案1】:

你应该试试这个。使用 layoutIfNeeded() 将重新定位所有内容。

UIView.animateWithDuration(2)  () -> Void in

                 self.label.center = CGPointMake(self.view.center.x, self.label.center.y)
                 self.again.center = CGPointMake(self.view.center.x, self.again.center.y)
                 self.view.layoutIfNeeded()
            

【讨论】:

对不起,这不起作用,我实际上在这个动画期间打印了一些东西到控制台,它打印了,但是组件没有移动到 iPhone 屏幕上 代替 self.view.layoutIfNeeded() 尝试 self.label.layoutIfNeeded() 和 self.again.layoutIfNeeded()【参考方案2】:

试试这个!

UIView.animateWithDuration(1.0,
delay: 2.0,
options: .CurveEaseInOut ,
animations: 
self.label.center = CGPointMake(self.view.center.x, self.label.center.y)
self.again.center = CGPointMake(self.view.center.x, self.again.center.y)    ,
completion:  finished in
  println("Bug moved left!")
  self.faceBugRight()
)

【讨论】:

以上是关于Swift 动画不工作的主要内容,如果未能解决你的问题,请参考以下文章

动画集合视图高度变化(Swift)

swift 3 layoutIfneeded 无法正常工作

带有 collectionView 的 Hero ViewController 动画 - swift

UIView 动画无法正常工作?

Button.center 不能在 Swift 3 / 4 的所有屏幕上工作

Swift Drag and Drop 不能在 Xcode 之外工作