繁体   English   中英

使用UIViewPropertyAnimator沿弯曲路径驱动动画?

Using UIViewPropertyAnimator to drive animation along curved path?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个由UIViewPropertyAnimator驱动的可中断过渡,我想使沿其目的地的非线性路径的视图动画化。

做一些研究,我发现做到这一点的方法是使用: CAKeyframeAnimation 但是,我在协调动画方面遇到问题,在CAKeyframeAnimation填充模式方面也遇到问题。 即使我将其设置为前进,它也似乎是反向的。

下面是贝塞尔曲线路径:

let bezierPath = self.generateCurve(from: CGPoint(x: self.itemStartFrame.midX, y: self.itemStartFrame.midY), to: CGPoint(x: self.itemEndFrame.midX, y: self.itemEndFrame.midY), bendFactor: 1, thickness: 1)

func generateCurve(from: CGPoint, to: CGPoint, bendFactor: CGFloat, thickness: CGFloat) -> UIBezierPath {

    let center = CGPoint(x: (from.x+to.x)*0.5, y: (from.y+to.y)*0.5)
    let normal = CGPoint(x: -(from.y-to.y), y: (from.x-to.x))
    let normalNormalized: CGPoint = {
        let normalSize = sqrt(normal.x*normal.x + normal.y*normal.y)
        guard normalSize > 0.0 else { return .zero }
        return CGPoint(x: normal.x/normalSize, y: normal.y/normalSize)
    }()

    let path = UIBezierPath()

    path.move(to: from)

    let midControlPoint: CGPoint = CGPoint(x: center.x + normal.x*bendFactor, y: center.y + normal.y*bendFactor)
    let closeControlPoint: CGPoint = CGPoint(x: midControlPoint.x + normalNormalized.x*thickness*0.5, y: midControlPoint.y + normalNormalized.y*thickness*0.5)
    let farControlPoint: CGPoint = CGPoint(x: midControlPoint.x - normalNormalized.x*thickness*0.5, y: midControlPoint.y - normalNormalized.y*thickness*0.5)


    path.addQuadCurve(to: to, controlPoint: closeControlPoint)
    path.addQuadCurve(to: from, controlPoint: farControlPoint)
    path.close()
    return path
}

路径可视化:

let shapeLayer = CAShapeLayer()
shapeLayer.path = bezierPath.cgPath
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 2
containerView.layer.addSublayer(shapeLayer)

这是位于UIViewPropertyAnimator内部的CAKeyframeAnimation

let curvedPathAnimation = CAKeyframeAnimation(keyPath: "position")
curvedPathAnimation.path = bezierPath.cgPath
curvedPathAnimation.fillMode = kCAFillModeForwards
curvedPathAnimation.calculationMode = kCAAnimationPaced
curvedPathAnimation.duration = animationDuration
self.attatchmentView.layer.add(curvedPathAnimation, forKey: nil)

到目前为止,此动画沿正确的路径进行,但是该动画会返回到其初始位置,并且与属性动画设计器不同步。

有什么建议么?

问题暂未有回复.您可以查看右边的相关问题.
8 jQuery弯曲路径动画,多路径

美好的一天,今天我看到了这个插件(http://phrogz.net/SVG/animation_on_a_curve.html)这是garog kistner制作的phrogz.net很棒的插件,我想知道是否有办法在其中使用多个弯曲路径页面并将其应用于一个对象,以便在第一个对象完成后继续沿另一 ...

2012-07-14 12:50:20 0 312   jquery
10 UIViewPropertyAnimator反向动画

我有一个完美运行的简单脉冲动画 我想制作相同的动画,但现在使用UIViewPropertyAnimator 。 是否可以使用新API优雅地复制此脉冲效果? 我是这样做的 但我的animatableView只是缩放到1.2。 ...

2017-11-26 13:20:02 2 3727   ios/ uikit
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM