【问题标题】:Swift : Animate CALayer Transform斯威夫特:动画CALayer变换
【发布时间】:2016-04-07 07:38:48
【问题描述】:

我有一个 CALayer 圆圈,我想为变换设置动画。我希望它从 0 开始,然后慢慢变大到原来的大小。这是我所拥有的:

expandingCircleLayer = CAShapeLayer()
let radius: CGFloat = (self.view?.bounds.width)! * 0.10
expandingCircleLayer!.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 2.0 * radius, height: 2.0 * radius)  , cornerRadius: radius).CGPath
expandingCircleLayer!.fillColor = UIColor.redColor().CGColor

动画完成后,我还想运行一段代码。我知道 SpriteNode 可以做到这一点,但我不太确定如何使用 CALayer。

请帮忙!

【问题讨论】:

标签: swift animation transform calayer


【解决方案1】:

我刚刚使用一个不错的代码块完成了这个循环节点,在这里可以找到:Circular progress timer/bar in iOS using SpriteKit

类结构很简单:

import SpriteKit

class CircularProgressNode : SKShapeNode
{
   private var radius: CGFloat!
   private var startAngle: CGFloat!

   init(radius: CGFloat, color: SKColor, width: CGFloat, startAngle: CGFloat = CGFloat(M_PI_2)) {
       super.init()

       self.radius = radius
       self.strokeColor = color
       self.lineWidth = width
       self.startAngle = startAngle

       self.updateProgress(0.0)
   }

   required init(coder aDecoder: NSCoder) {
       fatalError(“init(coder:) has not been implemented”)
   }

   func updateProgress(percentageCompleted: CGFloat) {
       let progress = percentageCompleted <= 0.0 ? 1.0 : (percentageCompleted >= 1.0 ? 0.0 : 1.0 - percentageCompleted)
       let endAngle = self.startAngle + progress * CGFloat(2.0 * M_PI)

       self.path = UIBezierPath(arcCenter: CGPointZero, radius: self.radius, startAngle: self.startAngle, endAngle: endAngle, clockwise: true).CGPath
   }
}

【讨论】:

  • 我不想做一个圆形进度条,我只想为 CAShapeLayer 的变换设置动画。类似于对 UIView 执行的操作: UIView.animateWithDuration(0.5) { view?.transform = CGAffineTransformMakeScale(1.0, 1.0) }
  • 在您的问题中,您询问是否可以使用 spritenode (spritekit)。 SKShapeNode 是 CAShapeLayer 的对应物。
  • 哦,很抱歉让您感到困惑。我说我知道使用 SpriteNode 是可能的,但想知道如何使用 CAShapeLayer。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2017-07-22
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
相关资源
最近更新 更多