2016-08-02 6 views
0

UIView 애니메이션이 끝났을 때 작업을 수행하려고합니다.UIView beginAnimations가 완료된 후 작업 수행

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

} 
+0

의 UIView의'beginAnimations'은 iOS4보다 새로운 아무것도 권장하지 않습니다, 대신 블록 기반의 애니메이션을 사용해야합니다. – Abizern

답변

1

업데이트 된이 코드는 도움이 될 수 있습니다 당신

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

답변 해 주셔서 감사합니다. 나는 당신의 코드를 시도했다. 그러나 지속 시간은 작동하지 않습니다. 플립 애니메이션은 빠르게 진행됩니다. animateWithDuration : 2.0을 변경하려고했습니다. 내가 뭘 잘못 했어. – user3266053

+0

@ user3266053 코드베이스를 공유 할 수 있습니까? –

+0

코드를 업데이트했습니다. – user3266053