2012-12-09 6 views
2

this post에서 저자는 viewWillAppear의 탭 전환 후 애니메이션을 다시 시작할 수 있다고했습니다.iOS 전환 후 애니메이션 다시 시작

startAnimationviewWillAppearviewDidAppear 모두라고했지만 여전히 실패했습니다.

아래는 내 코드의 일부입니다. 첫째 viewDidLoad에서 startAnimation를 호출하여 표시 할 때

- (void)startAnimation { 
    [UIView setAnimationsEnabled:YES]; 
    [UIView animateWithDuration:0.5f 
      delay:0.0f 
      options:UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat 
      animations:^(void){ 
       self.foreground.transform = CGAffineTransformMakeTranslation(0.0f, 5.0f); 
      } 
      completion:nil]; 
} 

애니메이션은 완벽하게 작동하지만, 다른 탭으로 전환 한 후 작동하지 않습니다.

startAnimation에 대한 관찰자를 UIApplicationWillEnterForegroundNotification으로 등록한 경우에도 응용 프로그램이 백그라운드에서 다시 시작한 후에도 작동하지 않습니다.

도와주세요, iOS 개발에 익숙합니다. 정말 고마워요.

답변

1

viewDidLoad 메서드는보기 컨트롤러가 처음로드 될 때만 호출됩니다.

다른보기 컨트롤러에서이보기 컨트롤러로 돌아갈 때 애니메이션을 실행하려면 viewDidLoad가 아닌 viewWillAppear에서 animation 메서드를 호출해야합니다.

애니메이션을 이전 값으로 되돌리고 다시 애니메이션을 만들려면 먼저보기의 변형을 ID (시작점으로 설정)로 설정 한 다음 animationWithDuration 메서드를 호출합니다.

변환을 변경하는 대신보기의 frame.origin 또는 center 속성에 애니메이션을 적용하는 것이 더 쉽습니다. 회전 변환, 축척 변경 등을 병합 할 때 변환을 변경하는 것은 복잡해집니다. 또한 transform 속성이 == identity 변환이 아닌 경우 frame 속성은 더 이상 유효하지 않습니다.

+0

나는 당신이 말하는 것을 정말로 이해하지 못했다. 내가 말했던 것처럼, 나는 viewWillAppear에서 나의 startAnimation을 불렀다. 왜 작동하지 않는지 알고 싶습니다. –

+1

"마침내 뷰의 변형을 정체성으로 설정"한다는 의미를 이해합니다. 이해할 수없는 사람들을 위해, 나는'startAnimation'의 시작 부분에'self.foreground.transform = CGAffineTransformIdentity;'를 추가했습니다. 애니메이션이 작동하려면 ** 필수 **입니다. –

+0

감사합니다. Yi Huang, 두 번째 메모는 나를 위해이 문제를 해결했습니다. – djskinner

관련 문제