有没有办法使用缓动曲线为高度约束设置动画?我想的可能是某种方式来设置CAKeyFrameAnimation
我想要的值和时间,并以某种方式影响高度约束。
我不确定是否存在可用于约束键帧的约束的单独动画calss,或者如果CAKeyFrameAnimation
允许我使用该类,或者如果它是{不可能。
编辑:以下是我正在尝试为我工作的内容,如果有人知道我是否走在正确的道路上,我会感谢一些指导:
self.heightConstraint.constant = newHeight
let animation = CAKeyframeAnimation(keyPath: "frame.size.height")
animation.values = [self.frame.size.height, newHeight]
animation.keyTimes = [0, 1]
animation.duration = self.animationDuration
animation.delegate = self
self.layer.add(animation, forKey: "heightChange")
newHeight
将是我想要的高度。但这只会让视图更高,没有任何动画。我正确使用这个吗?这可能与约束有关吗?
编辑2:我应该添加,我想使用比Apple提供的默认值更复杂的缓动函数UIView.animate(withDuraiton:...
。
答案 0 :(得分:2)
无需使用CAKeyframeAnimation。与任何其他动画一样,UIView动画会将动画放宽到约束条件:
myConstraintOutlet.constant = someNewValue
UIView.animate(
duration: 0.5,
delay: 0.0,
options: .curveEaseInOut, //Use ease-in, ease-out timing.
animations: {
self.view.layoutIfNeeded()
},
completion: nil)
如果你想要自定义计时,你也可以使用基于UIView的关键帧动画和方法animateKeyframes(withDuration:delay:options:animations:completion:)
(UIView动画比CAAnimations
更容易使用。)
或者,如果您需要的是不同的立方缓和曲线,您也可以这样做。请参阅此链接的最后一位:https://medium.com/@RobertGummesson/a-look-at-uiview-animation-curves-part-3-edde651b6a7a
关键位是该链接的代码段:
circleView.transform = CGAffineTransformMakeScale(0, 0)
let timingFunction = CAMediaTimingFunction(controlPoints: 5/6, 0.2, 2/6, 0.9)
CATransaction.begin()
CATransaction.setAnimationTimingFunction(timingFunction)
UIView.animateWithDuration(1) {
self.circleView.transform = CGAffineTransformIdentity
}
CATransaction.commit()
(那不是我的代码,它是Robert Gummesson的,来自上面的链接。所有写作的信用都归他所有。)