user3266053 user3266053 - 4 months ago 14
iOS Question

Doing an action after UIView beginAnimations is finish

I want to do an action when the UIView animation is finish.

if (flipStateHav1 == 1 && btnFrontHav1.tag == 1) {

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.8];

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:buttonContainerHav1 cache:YES];
[self.buttonContainerHav1 bringSubviewToFront:btnBackHav1];

[UIView commitAnimations];

//It is this code below I want to run after the animation is finish.
buttonContainerHav1.userInteractionEnabled = YES;
flipTurns = 0;
flipStateHav2 = 0;
par = 0;
}


I have tried using

completion:^(BOOL finished){
// your code
}];


But don't get it to work, probably i do something wrong.

Update code
The button is connected to two actions.

- (IBAction) buttonPressedFlipHav1 {

if (flipTurns == 0 || flipTurns == 1) {

flipTurns += 1;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.8];

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:buttonContainerHav1 cache:YES];
[self.buttonContainerHav1 bringSubviewToFront:btnFrontHav1];
buttonContainerHav1.userInteractionEnabled = NO;
flipStateHav1 = 1;
btnFrontHav1.tag = 1;

autoFlipCount += 1;

if (flipStateHav1 == 1 && flipStateHav2 == 1) {
par = 1;
parHav = 1;
btnFrontHav1.tag = 0;
btnFrontHav2.tag = 0;

flipTurns = 0;
autoFlipCount = 0;

if (parHav == 1 && parRiddare == 1 && parSkold == 1) {

autoFlipTimer = [NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(autoFlipAll) userInfo:nil repeats:NO];

}
}

} completion:^(BOOL finished) {

NSLog(@"autoFlipCount = %d",autoFlipCount);
NSLog(@"Flipturns = %d",flipTurns);
}];

}

}


And it is also connected to this action.

- (IBAction) autoFlip {
autoFlipTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(callAfterFiveSecond) userInfo:nil repeats:NO];
}


After 5 seconds it jump to this if statement. Updated

if (flipStateHav1 == 1 && btnFrontHav1.tag == 1) {

[UIView animateWithDuration:0.8 animations:^{

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:buttonContainerHav1 cache:YES];
[self.buttonContainerHav1 bringSubviewToFront:btnBackHav1];

} completion:^(BOOL finished) {
buttonContainerHav1.userInteractionEnabled = YES;
flipTurns = 0;
flipStateHav1 = 0;
par = 0;
}];

}

Answer

This code might help you

[UIView animateWithDuration:0.4 animations:^{
   //animation code here`
} completion:^(BOOL finished) {
      //code after animation here
}];
Comments