i have impletemented a button jiggle animation.where pressing a button wobbles ,but the problem is the animation does’nt stop and getting an error in [self.layer removeAllAnimations];
below is the code;
-(IBAction)button1Clicked:(id)sender
{
UIButton *no1 =sender;
output= [self answerCheck:no1.titleLabel.text];
self.label.text=output;
[self enableOptions:NO];
[self loadingView];
[self startJiggling:2];
}
- (void)startJiggling:(NSInteger)count
{
CGAffineTransform leftWobble = CGAffineTransformMakeRotation(degreesToRadians( kAnimationRotateDeg * (count%2 ? +1 : -1 ) ));
CGAffineTransform rightWobble = CGAffineTransformMakeRotation(degreesToRadians( kAnimationRotateDeg * (count%2 ? -1 : +1 ) ));
CGAffineTransform moveTransform = CGAffineTransformTranslate(rightWobble, -kAnimationTranslateX, -kAnimationTranslateY);
CGAffineTransform conCatTransform = CGAffineTransformConcat(rightWobble, moveTransform);
self.btnOption1.transform = leftWobble; // starting point
[UIView animateWithDuration:0.1
delay:(count * 0.08)
options:UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
animations:^{ self.btnOption1.transform = conCatTransform; }
completion:nil];
[self stopJiggling];
}
-(void)stopJiggling
{
[self.btnOption1.layer removeAllAnimations];
self.btnOption1.transform = CGAffineTransformIdentity; // Set it straight
}
You’re setting the animation on
self.btnOption1, so you would need to remove it fromself.btnOption1:but in fact if you just set the
transformproperty of the button again, outside of an animation block, it will remove the animation:(This worked in my test project.)
Update:
I notice that you’re starting the animation with a delay, and you’re calling
stopJigglingimmediately after you callanimateWithDuration:.... I don’t know why you’re using a delay or why you’re callingstopJigglingimmediately.I created a test case to match your code:
I hooked up my
btnOption1ivar to a button, and connected the button to thestartJigglingmethod. With the code as shown, clicking the button does nothing, because the animation is removed immediately after it is added. If I comment out theremoveAllAnimationsmessage, clicking the button makes the button start jiggling and it jiggles forever. I tested on the iPhone 4.3 simulator, the iPhone 5.0 simulator, the iPhone 5.1 simulator, and my iPhone 4S running iOS 5.1.So, I could not reproduce your problem. Sending
removeAllAnimationsremoves the animation in my test.I suspect that you just want the animation to repeat twice and then stop (since you have an argument named
countand you’re passing 2). If that’s what you want to do, you can do it like this:You set the repeat count inside the animation block using
+[UIView setAnimationRepeatCount:], and you restore the button’s transform in the completion block.