Рисование анимации пути в SpriteKit

Я пытаюсь оживить рисунок обводки на пути, используяSpriteKit, Я реализовал рабочее решение, используяSKActions и отдельная реализация с использованиемCABasicAnimations,SKAction решение не очень элегантное; он создает и обводит новый путь на каждой итерацииSKAction.repeatAction(action:count:) вызывать с каждым новым путем чуть более полным, чем предыдущий.

func start() {
    var i:Double = 1.0
    let spinAction:SKAction = SKAction.repeatAction(SKAction.sequence([
        SKAction.runBlock({
            self.drawCirclePercent(i * 0.01)

            if (++i > 100.0) {
                i = 1.0
            }
        }),
        SKAction.waitForDuration(0.01)
    ]), count: 100)
    runAction(spinAction)
}

func drawCirclePercent(percent:Double) {
    UIGraphicsBeginImageContext(self.size)

    let ctx:CGContextRef = UIGraphicsGetCurrentContext()
    CGContextSaveGState(ctx)
    CGContextSetLineWidth(ctx, lineWidth)
    CGContextSetRGBStrokeColor(ctx, 1.0, 1.0, 1.0, 1.0)
    CGContextAddArc(ctx, CGFloat(self.size.width/2.0), CGFloat(self.size.height/2.0), radius/2.0, CGFloat(M_PI * 1.5), CGFloat(M_PI * (1.5 + 2.0 * percent)), 0)
    CGContextStrokePath(ctx)

    let textureImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()
    texture = SKTexture(image: textureImage)

    UIGraphicsEndImageContext()
}

Хотя приведенный выше код работает, он, конечно, не очень и не эффективен, и, скорее всего, не такSKActions были предназначены для использования.CABasicAnimation Решение гораздо элегантнее и эффективнее.

let path:CGMutablePathRef = CGPathCreateMutable()
CGPathAddArc(path, nil, 0, 0, 40.0, CGFloat(M_PI_2 * 3.0), CGFloat(M_PI_2 * 7.0), false)

let pathLayer:CAShapeLayer = CAShapeLayer()
pathLayer.frame = CGRectMake(100, 100, 80.0, 80.0)
pathLayer.path = path
pathLayer.strokeColor = SKColor.whiteColor().CGColor
pathLayer.fillColor = nil
pathLayer.lineWidth = 3.0
self.view.layer.addSublayer(pathLayer)

let pathAnimation:CABasicAnimation = CABasicAnimation(keyPath: "strokeEnd")
pathAnimation.duration = 2.0
pathAnimation.fromValue = 0.0
pathAnimation.toValue = 1.0
pathLayer.addAnimation(pathAnimation, forKey: "strokeEndAnimation")

Моя проблема в том, что я действительно предпочел бы, чтобы весь код содержался в подклассеSKSpriteNode (настолько, что если два вышеупомянутых решения - единственные варианты, которые у меня есть, я бы выбрал первый). Есть ли способ, которым я могу улучшить свойSKAction реализация ближе к реализации CoreAnimation, без необходимости включатьCoreAnimation? По сути, мне интересно, есть ли в SpriteKit функциональность, о которой я не знаю, которую можно использовать для улучшения первой реализации.

Ответы на вопрос(2)

Ваш ответ на вопрос