3

Я внедряющих свой собственный пользовательский UIViewController переход, и когда я выход в отладчик кадр из TO View Controller, я получаю {{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? –