警告:CoreAnimation刚度必须大于0,但我使用viewAnimation

时间:2016-06-15 14:39:21

标签: swift animation core-animation uiviewanimation

我不知道为什么,但是我突然得到了这个警告,这是我以前没有得到的:

  

CoreAnimation:刚度必须大于0。

     

CoreAnimation:阻尼必须大于或等于0.

     

CoreAnimation:刚度必须大于0。

     

CoreAnimation:阻尼必须大于或等于0.

对于我的动画,我使用viewAnimation而不是来自框架UIKit?因为阻尼,刚度来自layerAnimation而来自框架CoreAnimation

当我更改约束时会出现问题。

这是我的代码:

放大图片

 @IBAction func posterButton(sender: AnyObject) {

        // Unhide poster
        poster.hidden = false

        // Show poster:
        for constraint in poster.superview!.constraints {

            if constraint.identifier == "EnlargePoster" {

                constraint.active = false

                let newConstraint = NSLayoutConstraint(item: self.poster, attribute: .Bottom, relatedBy: .Equal, toItem: self.poster.superview!, attribute: .Bottom, multiplier: 1, constant: 0)

                newConstraint.identifier = "EnlargePoster"
                newConstraint.active = true

                UIView.animateWithDuration(1.5, delay: 0, usingSpringWithDamping: 0.0, initialSpringVelocity: 0.0, options: [], animations: {

                    self.view.layoutIfNeeded()

                    }, completion: {_void in

                        // show poster close button
                        self.hidePosterButton.hidden = false
                })
            }
        }
    }

缩小图片

@IBAction func hidePoster(sender: AnyObject) {

        // hide poster:
        for constraint in poster.superview!.constraints {

            if constraint.identifier == "EnlargePoster" {

                constraint.active = false

                let newConstraint = NSLayoutConstraint(item: self.poster, attribute: .Bottom, relatedBy: .Equal, toItem: self.poster.superview!, attribute: .Bottom, multiplier: 1, constant: -672)

                newConstraint.identifier = "EnlargePoster"
                newConstraint.active = true

                UIView.animateWithDuration(0.6, delay: 0, usingSpringWithDamping: 0.0, initialSpringVelocity: 0.0, options: [], animations: {

                    self.view.layoutIfNeeded()

                    }, completion: {_void in

                        // Hide poster
                        self.poster.hidden = true
                })
            }
        }

1 个答案:

答案 0 :(得分:3)

UIView动画是Core Animation的高级包装器。在幕后,系统会创建一个或多个CAAnimation对象,以实现请求的动画。

在这种特殊情况下,听起来阻尼参数必须大于0,但UIKit方法不强制执行该要求 - 当系统将UIKit动画映射到Core Animation时会产生错误。你得到的信息很明显,阻尼需要> 0,所以使用大于零的值。

我不确定是什么僵硬。这必须是在UIView动画调用中未使用的基础Core Animation调用中使用的参数。我的猜测是,当你使用>时,错误就会消失。 0阻尼值。