【问题标题】:Move UIView per UIBezierPath [closed]每个 UIBezierPath 移动 UIView [关闭]
【发布时间】:2016-08-04 07:54:56
【问题描述】:

我有一个 UIBezierPath 来绘制这个

我想让红点在蓝色路径上无限移动(从右到左,从左到右)

我该怎么做?

【问题讨论】:

  • 请显示你如何绘制蓝色路径和红色路径的代码。
  • 作为 cmets 中第一个答案的屏幕截图(下)
  • 我有一个解决方案,但值得一试。一旦你有了贝塞尔路径(蓝色),创建一个蓝色贝塞尔路径的克隆并将它放在蓝色贝塞尔曲线的顶部。给克隆一个红色。现在将红色贝塞尔路径更改为破折号 a,修改破折号,以便路径中只有一个破折号。现在您可以为贝塞尔路径的相位设置动画,这条红色虚线将沿着它的路径移动。这会给人一种红色跟随蓝色路径的印象。
  • 学习创建minimal reproducible example。我们没有您的代码或任何证明您进行过任何研究的证据。我们无法以这种格式回答您的问题。请edit您的问题。

标签: swift animation uibezierpath


【解决方案1】:

您可以使用CAKeyFrameAnimation。将您的路径分配给动画对象的path 属性,然后在视图层上运行动画。

编辑

一个小sn-p作为提示:

let path = ... // the UIBezierPath
let animation = CAKeyFrameAnimation()
animation.path = path.CGPath
animation.calculationMode = kCAAnimationPaced // This give the animation an even pace
animation.repeatCount = HUGE // This makes the animation repeat forever

viewToAnimation.layer.addAnimation(animation, forKey: nil)

【讨论】:

  • 我可以要求一个小代码示例吗?我现在在自定义UIView中,在drawRect函数中绘制路径
  • @SwiftStudier 查看我编辑的答案。
  • 什么也没发生。我的错误是什么? (代码:ipic.su/img/img7/fs/Snimokekrana2016-08-04v11.1470298823.png
  • 不要在 'drawRect' 中添加子视图和运行动画。每一帧都会调用这个方法。
  • 如果一些绝望的灵魂仍在寻找正确的答案,代码如下: let animationSpark = CAKeyframeAnimation(keyPath: "position") animationSpark.path = path.cgPath animationSpark.calculationMode = .paced animationSpark.duration = 1.75 spark.layer.add(animationSpark, forKey: "SparkAnimation")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2015-12-19
  • 2012-07-24
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
相关资源
最近更新 更多