2015-04-04 123 views
0

我遇到与iOS CABasicAnimation有关的问题。无论我做什么,我都无法启动方法animationDidStart:animationDidStop:finished:。提前未调用的CAAnimation委托方法

- (void)start{ 
    [self removeAllAnimations]; 

    CABasicAnimation *pathAnimation = [self makeAnimationForKey:@"strokeEnd"]; 
    [self addAnimation:pathAnimation forKey:@"strokeEnd"]; 
} 

- (CABasicAnimation *)makeAnimationForKey:(NSString *)key { 
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:key]; 
    anim.fromValue = [NSNumber numberWithFloat:0.f]; 
    anim.toValue = [NSNumber numberWithFloat:1.f]; 

    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    anim.duration = self.duration; 
    anim.delegate = self; 
    return anim; 
} 

- (void)animationDidStart:(CAAnimation *)anim{ 
    NSLog(@"HERE START"); 
} 

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{ 
    NSLog(@"HERE STOP"); 
} 

任何提示或帮助将不胜感激,谢谢:我的类继承CAShapeLayer并执行它里面的动画!

+1

记住层被克隆的动画时,那么你可能不会得到你想要使用像这样的一个子类的效果。 – 2015-04-04 05:24:02

+0

感谢提醒大卫,我一定会记住它。 – 2015-04-05 19:17:02

+2

__请注意''CAAnimation''''delegate'是强大的,所以你可能需要将它设置为'nil'来避免保留周期!__ – 2016-08-10 12:35:37

回答

1

好吧,所以它变成我的子类我有一个属性称为持续时间。尽管它没有被记录为CALayer的区别,但持续时间是其协议之一CAMediaTiming的一部分。该方法从未被解雇,因为该属性被我的子类覆盖。

+0

这被视为记录在案。您通常不会提到在对象符合的协议中声明的属性或方法。 – 2015-04-06 09:51:13

6

你必须向层分配动画之前设置委托:

popIn.delegate = self; 
[annotation.layer addAnimation:popIn forKey:@"popIn"]; 
相关问题