Swift:为CALayer变换设置动画

Swift:为CALayer变换设置动画,swift,animation,transform,calayer,Swift,Animation,Transform,Calayer,我有一个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

我有一个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
动画完成后,我还想运行一段代码。我知道用Spritode可以做到这一点,但我不太确定如何用CALayer做到这一点


请帮忙

我刚刚使用一个很好的代码块完成了这个循环节点,在这里可以找到:

类结构非常简单:

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
   }
}
导入SpriteKit
类CircularProgressNode:SKShapeNode
{
私有变量半径:CGFloat!
私人var startAngle:CGFloat!
init(半径:CGFloat,颜色:SKColor,宽度:CGFloat,startAngle:CGFloat=CGFloat(M_PI_2)){
super.init()
自半径=半径
self.strokeColor=颜色
self.lineWidth=宽度
self.startAngle=startAngle
self.updateProgress(0.0)
}
必需的初始化(编码器aDecoder:NSCoder){
fatalError(“初始化(编码者:)尚未实现”)
}
func updateProgress(完成百分比:CGFloat){
让进度=完成百分比=1.0?0.0:1.0-完成百分比)
让endAngle=self.startAngle+progress*CGFloat(2.0*M_-PI)
self.path=UIBezierPath(弧心:CGPointZero,半径:self.radius,startAngle:self.startAngle,endAngle:endAngle,顺时针:true)。CGPath
}
}

这可能会对您有所帮助!我会用谷歌找到答案的。我不想做一个循环的进度条,我只想给CAShapeLayer的变换设置动画。类似于对UIView所做的操作:UIView.animateWithDuration(0.5){view?.transform=CGAffineTransformMakeScale(1.0,1.0)}在您的问题中,您会问是否可以使用spritenode(spritekit)。SKShapeNode是一款与CAShapeLayer相对应的产品。哦,很抱歉给您带来了困惑。我说我知道用Spritode是可能的,但我想知道如何用CAShapeLayer。