Swift:为CALayer变换设置动画
我有一个CALayer圆,我想为变换设置动画。我希望它从0开始,然后慢慢变大到其原始大小。以下是我所拥有的: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
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。