2010-02-02 2 views

답변

0

아무 것도 수행하지 않도록 어느 상태로 애니메이션해야하는지 뷰에 알리지 않습니다. beginAnimations:context:commitAnimations 사이에보기 모양을 변경하는 코드를 삽입해야합니다 (예 : 하나의 하위보기를 제거하고 다른보기 추가).

+0

흠, 나는 그에게 말할 필요가 없다고 생각합니다. IBAction에 코드를 적용 해 보았습니다. 나는 setAnimationTransition : forView : 을 썼다. 그래서 나는 애니메이션이 그 자신의보기에 있어야한다고 썼다. viewDidLoad 및 viewDidAppear-methode에서는 작동하지 않습니다. – Flocked

0
  1. 올바르게 beginAnimations:commitAnimations를 사용하지 않는. 일반적으로 애니메이션이 적용되지 않는 항목 사이에 무언가를 넣어야합니다. self.view.alpha = 0.5과 함께하면 페이딩 효과가납니다. 그들 사이에는없는 어떤 것에도 영향을 미치지 않습니다.

  2. viewDidAppear:이 호출 될 때까지 귀하의 견해가 나타납니다. 아무 것도 움직 이기에는 너무 늦었습니다. 당신이 실제로하고 싶은 것은이 같은 것입니다 :

    - (void)showMyViewWithAnimation { 
        [UIView beginAnimations:nil context:nil]; 
        [UIView setAnimationTransition:110 forView:childView cache:YES]; 
        [parentView addSubview:childView]; 
        [UIView commitAnimations]; 
    } 
    

    위의 예에서, childViewself.view라고하여 예 것입니다.

  3. 전환 이름을 적어주세요. 아무도 그것을 보면서 무엇을 알지 못합니다. 그것은 나쁜 스타일입니다. </학자 인>

+0

그 코드의 버그는'drum.view'가 아니라'self.view'에'setAnimationTransition : forView :'를해야한다는 것입니다. 문서에서 "컨테이너보기에서 전환을 설정합니다."라고 표시됩니다. – lawrence

+0

하지만 drum.view에 대한 효과를 원합니다;) 그 이유는 왜 내가 drumViewController의 viewDidLoad에 애니메이션을 가져 오려고했는지입니다. – Flocked

24

나는 같은 문제를했고 나는이 SO question에 대한 해결책을 찾은 것 같아요.

viewDidAppear이 호출 될 때 여전히 (이름에도 불구하고) 화면에 아무 것도 표시되지 않지만 곧 표시됩니다. 그런 다음 performSelector : withDelay 또는 NSTimer를 사용하여 애니메이션을 시작할 수 있습니다. 지연은 단지 0.1 일 수 있으며 화면이 나타날 때 애니메이션이 재생됩니다.

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    NSLog(@"View did appear!"); 

    [self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f]; 
} 

- (void)animationCode { 
    // you animation code 
} 
+0

이것은 나를 위해 일했습니다. 감사! – windson

+0

전에 많은 기사를 읽었습니다. 그리고 이것은 단지 나에게 일어난다. 고마워. –

+0

고마워요! 이것은 나를 위해 일했다! –

관련 문제