当前位置:  开发笔记 > IOS > 正文

Ios Swift在非线性路径中为视图设置动画

如何解决《IosSwift在非线性路径中为视图设置动画》经验,为你挑选了2个好方法。

我试图通过非线性路径动画UIView(我不是试图绘制路径本身),如下所示:

通过曲线动画的对象

视图的初始位置是使用尾部和底部约束(viewBottomConstraint.constant == 100&viewTrailingConstraint.constant == 300)确定的,我使用UIView.animatedWithDuration如下:

viewTrailingConstraint.constant = 20
viewBottomConstraint.constant = 450
UIView.animateWithDuration(1.5,animation:{
    self.view.layoutIfNeeded()
},completition:nil)

但它以直线路径为视图制作动画.



1> Leo..:

您可以将keyFrame动画与路径一起使用

    let keyFrameAnimation = CAKeyframeAnimation(keyPath:"position")
    let mutablePath = CGPathCreateMutable()
    CGPathMoveToPoint(mutablePath, nil,50,200)
    CGPathAddQuadCurveToPoint(mutablePath, nil,150,100, 250, 200)
    keyFrameAnimation.path = mutablePath
    keyFrameAnimation.duration = 2.0
    keyFrameAnimation.fillMode = kCAFillModeForwards
    keyFrameAnimation.removedOnCompletion = false
    self.label.layer.addAnimation(keyFrameAnimation, forKey: "animation")

GIF

关于这个功能

void CGContextAddQuadCurveToPoint (
   CGContextRef _Nullable c,
   CGFloat cpx,
   CGFloat cpy,
   CGFloat x,
   CGFloat y
);

(cpx,cpy)是控制点,(x,y)是终点 在此输入图像描述



2> Duncan C..:

Leo对使用Core Animation的回答CAKeyframeAnimation虽然很好,但是它在视图的“表示层”上运行,并且只会产生将视图移动到新位置的外观。您需要添加额外的代码,以在动画完成后将视图实际移动到最终位置。另外,核心动画非常复杂且令人困惑。

我建议使用UIView方法 animateKeyframesWithDuration:delay:options:animations:completion:。您可能希望使用option值UIViewKeyframeAnimationOptionCalculationModeCubic,该值使对象沿着通过所有点的弯曲路径移动。

可以在视图上调用它,然后在动画块中进行多次调用,以addKeyframeWithRelativeStartTime:relativeDuration:animations:将视图移动到沿曲线的点。

我在github上有一个示例项目,展示了此技术和其他技术。它称为KeyframeViewAnimations(链接)

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有