问题
I use CoreAnimation to animate UIImageView (curve Bezier animation). Here`s my code:
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"];
As a result, I get EXC_BAD_ACCESS (code=2, address=0x0) with stacktrace:
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
I tried to use different manuals to do it, but app crashes the same way. Can't understand where`s my fault. Any help will be appreciated, thanks.
P. S. Here's a similar bug, but unfortunately it is solved just by removing animation.
P. P. S. Arc is enabled. Also, if I comment pathAnimation.path = path.CGPath; line, crash does not appear, as well as animation (what is not surprised :) ).
回答1:
That error will be thrown when the object doesn't exist in memory. Make sure you initialization is proper way ?? make sure you initialize Layer..etc..
?
Best way is use BreakPoint to find out where your application get crush ??
I'm not sure but it may be helpful for you.
Add your animation as
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"];
回答2:
Replace CAKeyframeAnimation with CABasicAnimation:
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
pathAnimation.fromValue = [NSValue valueWithCGPoint:star.layer.position];
pathAnimation.toValue = [NSValue valueWithCGPoint:endPoint];
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
Seems it's Apple bug
来源:https://stackoverflow.com/questions/18033507/exc-bad-access-while-using-coreanimation