Используя переходы контроллера пользовательского представления iOS 7, я хочу добиться визуального эффекта, подобного переходу контроллера представления Apple по умолчанию в iOS 7.
(тот, где вы можете скользить, чтобы вытащить контроллер вида из стека, сдвинув его слева направо, где контроллер верхнего уровня сместится с верхней части другой с теневой и сдвигом навигационной панели.)
У меня много трудностей с этим. Большинство обучающих программ для пользовательских контроллеров представлений имеют очень разные эффекты, чем значение по умолчанию, чтобы показать, что API способен отключить, но я хочу реплицировать этот.
В моем подклассе для реализации <UIViewControllerAnimatedTransitioning>
у меня есть следующий код для интерактивной анимации:
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
[transitionContext.containerView addSubview:toViewController.view];
[transitionContext.containerView addSubview:fromViewController.view];
fromViewController.view.layer.shadowOffset = CGSizeMake(0.0, 0.0);
fromViewController.view.layer.shadowColor = [UIColor blackColor].CGColor;
fromViewController.view.layer.shadowRadius = 5.0;
fromViewController.view.layer.shadowOpacity = 0.5;
[UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
CGRect newFrame = fromViewController.view.frame;
newFrame.origin.x = CGRectGetWidth(fromViewController.view.bounds);
fromViewController.view.frame = newFrame;
} completion:^(BOOL finished) {
[transitionContext completeTransition:!transitionContext.transitionWasCancelled];
}];
}
Тем не менее теневой код сильно задерживает его (даже если я использую новые методы snapshot
), и я не могу понять, как вообще манипулировать навигационной панелью.
Кто-нибудь пытался сделать что-то похожее на это и может предоставить пример кода?
Пример проекта для тестирования, если вы хотите: http://cl.ly/0B3q1b390x0D
Кредит objc.io для базового кода.