2015-10-27 6 views
0

Мой код не работает.Почему 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"]; 

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

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


UPDATE: Я снова прочитал документацию и CAKeyframeAnimation, кажется, неправильный способ сделать it.I есть найти другой способ сделать it.thanks

+0

@manman спасибо, что moved.But я хочу, чтобы оживить форму пути, не в положении, как я могу это сделать – xxkkk

+0

ли вы имеете в виду что-то вроде [этот ответ] (HTTP: //stackoverflow.com/questions/9762236/how-to-animate-coregraphics-drawing-of-shape-using-cakeyframeanimation)? – manman

+0

Можете ли вы уточнить, что вы пытаетесь сделать? Вам нужно оживить переход от одного пути к другому или просто оживить рисунок пути, как если бы он рисовался пером? –

ответ

0

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

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