Почему CAKeyframeAnimation не появился после создания?

Мой код не будет работать.

- (CAKeyframeAnimation  *)createAnimation {
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"path"];

    //does the @"path" mean the path I created below ? or path on some layer?

    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];


    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, width-100, 0);

    CGPathAddQuadCurveToPoint(path, NULL, width+100, 300, width-100, height);
    CGPathAddQuadCurveToPoint(path, NULL, width+20, 220, width-100, height);
    CGPathAddQuadCurveToPoint(path, NULL, width+50, 230, width-100, height);
    // …… more code

    animation.path = path;
    animation.repeatCount = 10;
    animation.delegate = self;
    animation.duration = 2;

    CGPathRelease(path);
    return animation;
}

Это моя анимация. Я выполнил делегата animationDidStart а также didStop, Эта анимация выполнена.

Затем я добавляю эту анимацию в кастом CALayer, Я намерен анимировать один путь на слое. Это код для слоя:

 dragLayer = [[CAShapeLayer alloc] init];
    dragLayer.frame = CGRectMake(0, 0, width, height);
    dragLayer.path = [self pathToAnimateWithX:0 andY:0]; // custom method to create CGPathRef
    dragLayer.fillColor = appColor.CGColor;
    dragLayer.strokeColor = [UIColor redColor].CGColor  ;
    dragLayer.lineWidth = 5;
    [self.layer addSublayer:dragLayer];

    [dragLayer addAnimation:[self createAnimation] forKey:@"uposuuuition"];

Я думал, что проблема в том, что анимированный путь не имеет цвета, и я не знаю, как добавить его после долгих поисков (включая документацию Apple).

Другая проблема заключается в том, как анимировать собственный путь dragLayer вместо его воссоздания.


ОБНОВЛЕНИЕ: я прочитал документацию снова, и CAKeyframeAnimation, кажется, неправильный способ сделать это. Я нашел другой способ сделать это. Спасибо

1 ответ

Проблема в том, что вы анимируете path свойство слоя формы, но вы хотите анимировать position имущество. Попробуйте это вместо этого:

- (CAKeyframeAnimation  *)createAnimation {
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    ...
Другие вопросы по тегам