2011-04-08 8 views
3

landscape에서 가로 뷰 모드에서 하나의보기 (탐색 컨트롤러 스택의 일부)에서 다른보기로 전환 할 때 UIModalTransitionStyleFlipHorizontal을 modalTransitionStyle로 설정하면 뷰가 세로 방향으로 세로로 뒤집습니다.UIModalTransitionStyleFlipHorizontal Landscape에서 세로로 뒤집습니다.

뷰의 프레임 크기가 변경되지 않아서 다른 코드에서 문제가 발생한다는 것을 알았지 만 애니메이션 후에도 뷰의 모양에 대한 모든 것이 잘되었습니다. 나는이 특별한 플립을 가로 대신 세로로 만드는 것이 무엇이든간에 수정하면 다른 문제를 해결할 것이라고 생각했습니다.

나는 방향 자체가 바뀌지 않고 창 자체와 관련이 있다고 가정하지만, 그게 확실하지는 않습니다.

누구든지 아이디어가 있습니까?

답변

2

WWDC의 Apple 엔지니어와상의하고 UIModalTransitionStyleFlipHorizontal이 가로로 작동하지 않는다고 생각하면 수직으로 보이는 것을 뒤집을 것입니다.

내가 언급 한 다른 문제는보기에 프레임을 올바르게 적용하지 않았기 때문입니다.

+0

Apple 엔지니어 @ WWDC에 대한 훌륭한 언급. 나는이 정확한 문제를 겪고 있으며, 당신은 내가 다른 전환으로 전환해야한다는 확신을 갖게했습니다. 감사! –

0

iOS7 사용자 지정보기 컨트롤러 전환을 사용하는 경우이를위한 해결책이 있습니다. 전환을 시작하는 ViewController는 프로토콜에 다음 메소드를 구현하는지 확인해야합니다.

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController: (UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { 
    return (id<UIViewControllerAnimatedTransitioning>)self; 
} 

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed { 
    return (id<UIViewControllerAnimatedTransitioning>)self; 
} 

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext { 
    return 0.7f; 
} 

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext { 
    UIView *containerView = [transitionContext containerView]; 


    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    [containerView addSubview:fromVC.view]; 

    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
    [containerView addSubview:toVC.view]; 

    UIViewAnimationOptions animationOption; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) { 
     animationOption = ([toVC.presentedViewController isEqual:fromVC])?UIViewAnimationOptionTransitionFlipFromTop:UIViewAnimationOptionTransitionFlipFromBottom; 
    } 
    else { 
     animationOption = ([toVC.presentedViewController isEqual:fromVC])?UIViewAnimationOptionTransitionFlipFromLeft:UIViewAnimationOptionTransitionFlipFromRight; 
    } 

    [UIView transitionFromView:fromVC.view 
        toView:toVC.view 
        duration:[self transitionDuration:transitionContext] 
        options:animationOption 
       completion:^(BOOL finished) { 
        [transitionContext completeTransition:YES]; 
        }]; 
} 

같이 설정되어야 할 표시 모달의 ViewController의 전이 대리자 : [modalViewController setTransitioningDelegate : 자기]; 예를 들어,이 linke는 prepareForSegue : 메소드에 넣을 수 있습니다.

그게 전부입니다.

+0

iOS8에서 그렇게 해 봤지만 제시 될 때 애니메이션을 적용하지 않습니다. 그러나 애니메이션을 닫을 때 움직이지 않습니다. – Matthew

관련 문제