在 UIView beginAnimations 完成后做一个动作

Doing an action after UIView beginAnimations is finish

我想在 UIView 动画结束时做一个动作。

    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;
}

我试过使用

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

但是没有让它工作,可能是我做错了什么。

更新代码 该按钮连接到两个操作。

- (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);
    }];

  }

}

而且也和这个动作有关。

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

5秒后跳转到这个if语句。 已更新

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;
    }];

}

此代码可能对您有所帮助

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