EXC_BAD_ACCESS,同时使用CoreAnimation

我使用CoreAnimation来animationUIImageView(曲线贝塞尔animation)。 这里是我的代码:

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; pathAnimation.calculationMode = kCAAnimationCubic; pathAnimation.fillMode = kCAFillModeForwards; pathAnimation.removedOnCompletion = NO; CGPoint endPoint = originalPosition; UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:star.layer.position]; [path addQuadCurveToPoint:endPoint controlPoint:CGPointMake(star.layer.position.x, endPoint.y)]; pathAnimation.path = path.CGPath; [star.layer addAnimation:pathAnimation forKey:@"moveToScorebarAnimation"]; 

结果,我得到了stacktrace的EXC_BAD_ACCESS(code = 2,address = 0x0)

 CoreGraphics`CG::Path::apply(void*, void (*)(void*, CGPathElementType, CGPoint const*)) const: 0x613c06: pushl %ebp 0x613c07: movl %esp, %ebp 0x613c09: subl $24, %esp 0x613c0c: movl 8(%ebp), %eax 0x613c0f: movl (%eax), %ecx 0x613c11: movl (%ecx), %eax 0x613c13: movl 16(%ebp), %edx 0x613c16: movl %edx, 8(%esp) 0x613c1a: movl 12(%ebp), %edx 0x613c1d: movl %edx, 4(%esp) 0x613c21: movl %ecx, (%esp) 0x613c24: calll *64(%eax) 0x613c27: addl $24, %esp 0x613c2a: popl %ebp 0x613c2b: ret 

我试图使用不同的手册来做到这一点,但应用程序崩溃的方式相同。 不明白我的错在哪里。 任何帮助将不胜感激,谢谢。

PS这里有一个类似的错误 ,但不幸的是它只是通过删除animation来解决。

PPS弧启用。 另外,如果我评论pathAnimation.path = path.CGPath; 行,崩溃没有出现,以及animation(什么是不感到惊讶:))。

当对象不存在于内存中时,将引发该错误。 确保你初始化是正确的方式? 确保你初始化Layer..etc..

最好的方法是使用BreakPoint来找出你的应用程序的迷恋?

我不确定,但可能对您有所帮助。

添加你的animation

 CAAnimationGroup *group = [CAAnimationGroup animation]; group.animations = [NSArray arrayWithObjects: pathAnimation,nil]; group.duration = 7.0; //The total time of the animations, don't know if redundant group.delegate = self; [self.layer addAnimation:group forKey:@"path"]; 

用CABasicAnimationreplaceCAKeyframeAnimation:

  CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; pathAnimation.fromValue = [NSValue valueWithCGPoint:star.layer.position]; pathAnimation.toValue = [NSValue valueWithCGPoint:endPoint]; pathAnimation.fillMode = kCAFillModeForwards; pathAnimation.removedOnCompletion = NO; 

看来这是苹果的错误