2011-08-09 2 views
0

이 코드를 가지고 :IOS : UIViewImage setAlpha 문제

때 0.00에서 1.00로 이미지 전환 알파 그것입니다 imediately하지 삼초에, 왜?

- (void) startAnimation{ 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:3]; 
[successView setAlpha:1.00]; 
[UIView commitAnimations]; 


[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:3]; 
[successView setAlpha:0.00]; 
[UIView commitAnimations];} 

답변

3

두 애니메이션은 그 UIView의 애니메이션 작업 - 모든 방법 애니메이션을 하나의 실행주기에 "연결된." 당신은에

[UIView setAnimationDelay:3.0]; 

를 사용해야합니다입니다 (같은 실행주기에 실행됩니다 두 번째 애니메이션.


예제 코드
두 가지 방법 표준이 애니메이션을 시작/커밋이-사용하거나 차단하는 방법을 사용하여이있다.이 예제를 사용 당신이 가지고있는 시작/커밋 애니메이션 코드. 이 문제는 애니메이션이 연결되고 CA에 가지 않고도 표준 애니메이션 동작은 다른 애니메이션이 실행되기 전에 강제로 종료되도록하는 것입니다. 실행 루프와 관련이 있습니다. 애니메이션 기반 인터페이스 빌드 WWDC 2010에서이 문제에 대해 깊이 들어갑니다. 그러나 원하는 코드를 수행하는 코드는 다음과 같습니다.

- (void)fadeOut { 
    [UIView beginAnimations:@"Animation2" context:NULL]; 
    [UIView setAnimationDuration:3]; 
    [self.testView setAlpha:0.00]; 
    [UIView commitAnimations]; 
} 
- (IBAction)animate { 
    [UIView beginAnimations:@"Animation1" context:NULL]; 
    [UIView setAnimationDuration:3]; 
    [self.testView setAlpha:1.00]; 
    [UIView commitAnimations]; 

    [self performSelector:@selector(fadeOut) withObject:nil afterDelay:3.0]; 
} 

기본적으로 실행 루프가 깨지도록 강요해야합니다. 기억해야 할 중요한 점은 코드가 예상되는 것처럼 애니메이션이 순차적으로 실행되지 않는다는 것입니다.

블록 기반 코드는 다음과 같습니다. 애니메이션을 자동으로 반복하는 autorepeat 옵션을 사용하고 있습니다. 애니메이션에서는 속성을 설정하고 있으므로 애니메이션이 완료된 후에 기본적으로보기가 다시 표시됩니다. 따라서 완료 블록에서 속성을 다시 0으로 설정했습니다.

- (IBAction)animate { 
    [UIView transitionWithView:self.testView duration:3.0 options:UIViewAnimationOptionAutoreverse animations:^{self.testView.alpha = 1.0;} completion:^(BOOL finished) {self.testView.alpha = 0.0;}]; 
} 

이 정보가 도움이되기를 바랍니다.

+0

괜찮지 만 0.00에서 1.00까지의 알파는 3 초가 지나면 즉시 나타나지 않도록하고 싶습니다. 예를들 수 있습니까? – CrazyDev

+0

네, 완전히 작동하고 테스트 된 예제가 게시되었습니다. – FeifanZ