2011-08-08 3 views
1

사용자 정의 애니메이션을 사용하여 UINavigationController의보기 스택에서보기 컨트롤러간에 전환하는 앱을 작성하려고합니다.UIView transitionWithView 펑키 결과

지금 당장은 메카닉을 올바르게 작동시키기 위해 동일한 뷰의 여러 래퍼를 추가하고 있습니다.

내 시각 목표는 다음과 같습니다.
1. 새 "FirstVC"를 만듭니다.
2. [FirstVC보기]의 알파 값을 0으로 설정하십시오.
3. [FirstVC보기]의 변환 값을 양방향으로 25 % (수평 & 세로)로 설정하십시오.

애니메이션 블록에서 수행하고자하는 작업은 다음과 같습니다.
1. [OutgoingVC view]의 변환 값을 양방향으로 500 %로 설정합니다 (5 배 폭파).
2. [OutgoingVC view]의 알파 값을 0으로 설정합니다 (아무 것도 변하지 않음).
3. [FirstVC보기]의 변환 값을 1로 설정하십시오 (원래 크기로 되돌림). 4. [FirstVC보기]의 알파 값을 1로 설정하십시오 (전체 색상으로 희미 해짐).

이 애니메이션의 실제 효과는 "다음 페이지/하단 페이지"가 ​​(전체 화면에만 표시) 사라지고 페이드 인되는 동안 "톱 페이지"가 ​​날아가서 사라져야한다는 것입니다. 사용자가 떨어지는 생각입니다 바닥이나 무언가를 통해서. "더 깊이 간다."

내 애니메이션을 10.0 초 간격으로 늦추어서 무슨 일이 일어나는지 더 잘 처리 할 수있게되었습니다.

"OutgoingVC"(즉, 평면도)에서 일어나는 애니메이션이 정확한 것처럼 보입니다. 그러나 아래쪽보기는 화면 크기와 알파 = 1.0의 100 %로 잘 들어간 것처럼 보이지만 계속해서 4x/5x로 날아가고 0의 알파로 사라집니다. 화면이 완전히 검게되면 새로운 UIViewController (FirstVC)가 화면에 올바르게 표시됩니다.

내 코드가 내가 원하는 방식으로 작동하지 않는 이유를 알 수 있습니까?

감사합니다.


어리석은 me! 여기에 코드입니다 :

- (IBAction)AddNewScreenPressed:(id)sender 
{ 
    FirstVC *newViewController = [[FirstVC alloc] init]; 
    UIView *currentView = [self view]; 
    UIView *newView = [newViewController view]; 
    [newView setTransform:CGAffineTransformMakeScale(0.25, 0.25)]; 
    [newView setAlpha:0]; 
    [UIView transitionWithView:[self view] 
         duration:10.0 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         [[self view] addSubview:newView]; 
         [currentView setAlpha:0]; 
         [currentView setTransform:CGAffineTransformMakeScale(5.0, 5.0)]; 
         [newView setAlpha:1.0]; 
         [newView setTransform:CGAffineTransformMakeScale(1, 1)]; 
        } 
        completion:^(BOOL finished){ 
         [[self navigationController] pushViewController:newViewController animated:NO]; 
        } 
    ]; 
} 

답변

1

당신은 currentView의 서브 뷰로 newView을 추가 한, 그래서 당신이 currentView로하고있는 아마 애니메이션도 newView에 적용 - 그것은 아마도 최대 확장 등뿐만 아니라, 그 파단의 알파 변경 newView. newView의 초기 스케일을 0.2로 할 수 있었습니까? 그리고 애니메이션 블록에 newView의 스케일을 떨어 뜨리면 1.0 스케일로 끝날까요? 그래도 알파에 대해 무엇을해야할지 모르겠다면 ...

편집 해 주셔서 감사합니다. 다행 이군요. 깨끗하게 처리 할 수 ​​있습니까? (화면에서 이미지를 잡아서 뷰를 어쨌든 별도의 viewcontroller를 사용하여 전환을 관리하고 두 이미지를 전달하여 내부적으로 애니메이션을 수행 할 수 있으므로 애니메이션없이 앞쪽으로 밀고 애니메이션을 첫 번째 뷰의 이미지에서 시작하여 두 번째보기의 이미지 (컨트롤러의 전체보기가 아닌 두 개의 imageView에서 표준 애니메이션을 수행 할 수 있습니다.) 완료되면 두 번째보기 컨트롤러를 밀어 넣으시겠습니까?

+0

최종 해결책은 iOS 5 Beta에서 단편을 사용하는 것이 었습니다. 나는 지금 더 많은 것을 논평 할 수 있는지 확신 할 수 없다. 그러나 당신의 편집은 내가 구현 한 것에 이론 상으로는 가깝다. 따라서 귀하의 답변이 수락됩니다! – mbm29414

1

더 많은 것을 가지고 노는 후, 나는 고비를 넘겨 다른 장애물을 만났습니다.

jrturton의 대답은 내가 자기 뷰에 새로운 뷰를 추가한다는 사실과 관련이있는 것처럼 보였으므로 upvoting jrturton의 대답입니다.

내가이 문제를 해결하기 위해 수행 한 작업은 [자체 뷰]와 해당 하위 뷰 사이에 존재하는 버퍼 뷰 ([self BackView])를 추가하는 것이 었습니다.

- (IBAction)AddNewScreenPressed:(id)sender 
{ 
    FirstVC *newViewController = [[FirstVC alloc] init]; 
    UIView *newView = [newViewController view]; 
    [newView setAlpha:0]; 
    [newView setTransform:CGAffineTransformMakeScale(0.25, 0.25)]; 
    [[self view] addSubview:newView]; 
    [UIView transitionWithView:[self view] 
         duration:1.0 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         [[self BackView] setTransform:CGAffineTransformMakeScale(5, 5)]; 
         [[self BackView] setAlpha:0]; 
         [newView setTransform:CGAffineTransformMakeScale(1, 1)]; 
         [newView setAlpha:1]; 
        } 
        completion:^(BOOL finished){ 
         [newView removeFromSuperview]; 
         [[self navigationController] pushViewController:newViewController animated:NO]; 
         [[self BackView] setTransform:CGAffineTransformIdentity]; 
         [[self BackView] setAlpha:1]; 
        } 
    ]; 
} 

지금, 물론, 내가 컨트롤러를 보여주고, 즉, 또 다른 문제로 실행했습니다

그런 다음, 다음 코드를 다음은 새로운 뷰 컨트롤러를 밀어하기 위해 노력하고 있습니다.

내가 그들을 팝업

이 애니메이션은 잘 작동하는 것 같다,하지만 난 결국 (완료 블록)에 도착하고 수행 할 때 다음도
[[self navigationController] popViewControllerAnimated:NO];
나 :
[[self navigationController] popViewControllerAnimatedYES];
내가 결국 무엇을 와 함께 빈 흰색 화면입니다.

"푸시 애니메이션"중에 내가하고있는 일이이 문제의 원인이라고 가정하고 있습니다. 그러나 나는 그것을 이해할 수 없습니다! 도움!

감사합니다.

+0

"공개"하고 해당 이미지 ([[UIImageView alloc] initWithImage : highlightedImage :])를 사용하여 애니메이션을 적용하기 위해 뷰의 이미지를 잡아서 원하는 것을 할 수 있습니다. 그럼, 터지는 것은 잘 작동합니다. – mbm29414