通过layoutIfNeeded停止工作的图像动画

时间:2016-03-15 21:24:09

标签: swift animatewithduration

我遇到了一个让我感到困惑的问题。我写了一个简单的动画,两个图像移动,它完美地工作。然而突然间它停止了动画,我无法弄清楚原因。我还没有做出任何可以影响动画效果的改变。我已经检查过NSLayoutConstraints实际上正在更新它们,但它没有动画。任何想法都不仅仅是值得赞赏的。

不幸的是,我没有任何git版本。我是一个新手,至少这次经历让我想到了git的价值,今后我会用它。我在故事板中添加了约束,其中四个是我试图通过代码影响的。它们是我试图移动的两个图像的y和x约束。

其他信息我有四条警告说:在当前配置中,约束引用项已关闭。在当前配置中关闭此约束。我已经得出结论,给出警告的限制是我试图制作动画的四个限制因素。但我仍然不确定如何解决这个问题。

其他更新 我现在已将动画代码移动到override func viewWillAppear(animated: Bool) { super.viewWillAppear(true)。在这之后我实际上看到了动画,如果我删除了第一个self.view.layoutIfNeeded()然而它动画了所有的视图。但我无法仅通过约束更改来制作动画。

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

...

    self.view.layoutIfNeeded()
    self.firstCallyC?.constant = 0

    UIView.animateWithDuration(1.3, delay: 0.3, options: .CurveEaseInOut, animations: {
        self.firstCallyC!.constant = (usePoint[0].y) - 210
        self.firstCallxC?.constant = (usePoint[0].x) - 300
        self.meditateyC?.constant = (usePoint[179].y) - 210
        self.meditatexC?.constant = (usePoint[179].x) - 300
        self.view.layoutIfNeeded()
        }, completion: nil)
}

2 个答案:

答案 0 :(得分:0)

你应该从动画块中约束常量

  firstCallyC!.constant = (usePoint[0].y) - 210
  firstCallxC?.constant = (usePoint[0].x) - 300
  meditateyC?.constant = (usePoint[179].y) - 210
  meditatexC?.constant = (usePoint[179].x) - 300
  UIView.animateWithDuration(1.3, delay: 0.3, options: .CurveEaseInOut, animations: {

      self.view.layoutIfNeeded()
 }, completion: nil)

答案 1 :(得分:0)

我终于通过在类中添加override func viewDidAppear然后将动画添加到该函数来找到解决方案。我想所有的图像都需要正确加载和放置才能动画或类似的东西?