2011-09-29 3 views
2

전체 화면을 차지하는 2 개의 하위보기가 있습니다 (상태 표시 줄 제외). 이 크기를 "화면 크기"라고합시다.iPhone - 동시에 2 개의 하위보기 애니메이션하기

내가 모두 애니메이션 할 :

  • 알파 0 알파 1

  • 에서 두 번째로, 화면 크기의 화면 크기보다 큰 약간으로부터 확대 할 제 화면 크기보다 약간 작은 화면 크기 (알파 1에서 알파 0까지).

두 번째보기는 화면에 표시되며 시작시 표시됩니다. 물론

- (void) switchViews 
{ 
    if (self.view2Controller == nil) { 
     self.view2Controller = [[View2Controller alloc] initWithNibName:@"View2XIB" bundle:nil]; 
     self.view2Controller.view.hidden = YES; 
     [self.view addSubview:self.view2Controller.view]; 
    } 

    CGRect bigFrame = CGRectInset(self.view.frame, -50, -50); 
    CGRect normalFrame = self.view.frame; 
    CGRect smallFrame = CGRectInset(self.view.frame, 50, 50); 

    self.view2Controller.view.frame = bigFrame; 
    self.view2Controller.view.alpha = 0.0; 

    [UIView beginAnimations:@"Anim1" context:nil]; 
    [UIView setAnimationDuration:5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; 

    self.view2Controller.view.hidden = NO; 
    self.view2Controller.view.frame = normalFrame; 
    self.view2Controller.view.alpha = 1.0; 

    [UIView commitAnimations]; 

    // ------------------------------ 

    [UIView beginAnimations:@"Anim2" context:nil]; 
    [UIView setAnimationDuration:5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; 

    self.view1Controller.view.frame = smallFrame; 
    self.view1Controller.view.alpha = 0.0; 

    [UIView commitAnimations]; 
} 

, 나는 독특한 하나에 모두 애니메이션을 넣어 처음 시도했다 :

나는이 썼다. 그건 아무 것도 변하지 않으니까요. 그래서 그것들을 분리하려고했습니다.

실행되면 view1이 즉시 검정색으로 바뀌고 view2가 예상대로 애니메이션을 시작합니다. 그러나 두 애니메이션을 동시에 실행할 수는 없습니다.

어떻게하면됩니까?

답변

0

입니다. 그래서 내 프로젝트에서 코드를 시험해 보았는데 제대로 작동했다.

뷰 1은 다운 오른쪽으로 이동하고 페이드 아웃 뷰 2는 왼쪽 상단에서 온 페이드에있는 동안은 ... 그래서 난 당신이 다른 곳에서 에러를보고있다 생각 ...

챠오,

루카

편집 :

여기에 코드입니다 : 그 당신이 원하는 그들을 체인 경우에 더 적합 할 것이라고 생각

test-switch.zip

+0

어 ... 아니, 농담하는거야? 나는 오늘 밤했던 것처럼 코드를 격리하려고 노력할 것이다. :-) – Oliver

+0

아 아 ... 미안하지만 ... 검색 필드가 보낸 코드보다 약간 큽니다 ... 고립 된 코드를 사용해보십시오 (새 편집 된 답변보기) – meronix

2

블록 기반 애니메이션을 살펴보십시오. iOS 4.0 이상 권장 방법입니다. 당신이 애니메이션의 내부에 넣어이

//You can do the same thing with a frame 
CGPoint newCenter = CGPointMake(100, 100); 
[UIView animateWithDuration:2.0 
       animations:^{ 
        firstView.center = newCenter; 
        secondView.center = newCenter; 
        firstView.alpha = 0.2; 
       } 
       completion:^(BOOL finished){ 
        NSLog(@"All done animating"); 
       }]; 

아무것도 같은 것을 시도 What are block-based animation methods in iPhone OS 4.0?

편집 : 대답은 여기에서보세요^{}보기의 대상 설정 될 것입니다. 위는 알파뿐만 아니라 위치를 변경하는 방법을 보여 줬습니다.

+0

, 또는 순서대로 (하나는 다른 하나는 곧바로) 생기게하지만, 그들은 샘에서 발생하기를 원한다. 전자 시간. –

+0

나는 체인 부분을 얻었지만 서로 비슷한 두 개의 블록 문을 가질 수는 없었을까요? 그래서 블록은 어느 시점에 어느 정도 발사 되었습니까? – Cameron

+0

지금 당신의 요점을 이해합니다. 아마, 나는 그것을 시도하지 않았다. –

0

사용하고자하는 것은 (Core Animation Group)입니다.

CAAnimationGroup을 사용하면 여러 애니메이션을 그룹화하고 동시에 실행할 수 있습니다. 그룹화 된 애니메이션은 CAAnimationGroup 인스턴스에 지정된 시간 공간에서 실행됩니다.

setAnimations:과 같이하려는 애니메이션 배열로 설정하는 animations 속성이 있습니다. 여기

내가 코드에서 잘못된 아무것도 볼 수없는 usage example

+0

고맙습니다. 제 편집문을 볼 수 있을까요? 그리고 하나의 보너스 질문 : CAAnimationGroup을 정의 할 때보기에 영향을 주어야합니까? 첫 번째보기, 두 번째보기? 또는 내가 애니메이션하려는 2 개의 하위보기의 부모? – Oliver

+0

애니메이션 그룹에는 기본적으로 두 애니메이션의 배열이 포함되며 각 애니메이션은 애니메이션을 적용하려는 다양한보기에 영향을 미칩니다. –

관련 문제