我使用CoreAnimation为UIImageView设置动画(曲线Bezier动画)。这是我的代码:
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
我尝试使用不同的手册来执行此操作,但应用程序以相同的方式崩溃。无法理解我的错在哪里。任何帮助将不胜感激,谢谢。
P上。 S.这是一个类似的bug,但不幸的是它只是通过删除动画来解决。
P上。 P. S. Arc已启用。另外,如果我评论 pathAnimation.path = path.CGPath; 行,则不会出现崩溃,也不会出现动画(不会感到惊讶:)。
答案 0 :(得分:1)
当内存中不存在该对象时,将抛出该错误。确保初始化是正确的方法??确保初始化Layer..etc..
?
最好的方法是使用 BreakPoint 找出你的应用程序粉碎的地方?
我不确定,但它对你有帮助。
将动画添加为
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"];
答案 1 :(得分:1)
将CAKeyframeAnimation替换为CABasicAnimation:
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
pathAnimation.fromValue = [NSValue valueWithCGPoint:star.layer.position];
pathAnimation.toValue = [NSValue valueWithCGPoint:endPoint];
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
似乎是Apple的错误