2014-02-17 42 views
3

我正在实现我自己的自定义UIViewController转换,并且当我向调试器输出TO视图控制器的帧时,我收到初始帧和最终帧的{{0, 0}, {0, 0}}。我认为上下文中的方法应该显示最终转换之后的预期帧,以及转换之前的初始帧。UIViewControllerContext initalFrameForViewController&finalFrameForViewController为所有值显示0

这是应该如何工作?

-(void)startInteractiveTransition:(id<UIViewControllerContextTransitioning>)transitionContext{ 

    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 

    CGRect initialToFrame = [transitionContext initialFrameForViewController:toVC]; 
    CGRect finalToFrame = [transitionContext finalFrameForViewController:toVC]; 
    NSLog(@"initialToFrame: %@, finalToFrame: %@", NSStringFromCGRect(initialToFrame), NSStringFromCGRect(finalToFrame)); 
} 

调试器表示: initialToFrame: {{0, 0}, {0, 0}}, finalToFrame: {{0, 0}, {0, 0}}


另外,调试器也呈现出以下警告。这是否会影响错误?

Presenting view controllers on detached view controllers is discouraged

+0

文档说,当视图尚未显示在屏幕上或者在转换过程中完全覆盖时,这些方法可以返回'CGRectZero'。也许其中之一就是你的情况。 –

+0

我有同样的问题,并且我没有您收到的调试消息。 – bogardon

+0

set'modalPresentationStyle = UIModalPresentationFullScreen;' – bogardon

回答

1

你应该知道的第一件事是,有大约两定做各种转变:充分和非全屏,并且要求在非全屏转变为toVC.vew最后一帧只是没有感。

在你没有设置modalPresentationStyle或明确将其设置为UIModalPresentationFullScreen(这是默认值)的UIKit知道toVC.view将覆盖整个屏幕的情况下,这样-finalFrameForViewController:toVC将返回正确的框架:主屏框架。

使用modalPresentationStyle = UIModalPresentationCustom你指定的过渡应该是非全屏,就是这样:toVC.view将覆盖部分fromVC.view(因此fromCV.view将保持在层次结构),其中toVC.view将覆盖fromVC.view是你的决定这就是为什么-finalFrameForViewController:返回CGRectZero

CGRectZero告诉你的是:“嘿,伙伴,一个人留下,把这个观点放在任何你想要的地方”。

入住此演示出更多的信息:http://es.slideshare.net/Split82/custom-uiviewcontroller-transitions

希望这有助于。

+0

那么,initFrame呢? –