【发布时间】:2015-05-19 19:24:37
【问题描述】:
我有一个视图控制器,它在某些操作上显示另一个覆盖屏幕下半部分的视图控制器。
当我从底部为第二个视图控制器(呈现的视图控制器)设置动画以覆盖屏幕的下半部分时,我还希望将呈现的视图动画到屏幕的上半部分。请参阅下面的代码 -
- (void)animatePresentationWithTransitioningContext:(id<UIViewControllerContextTransitioning>) transitioningContext
{
UIViewController *presentedController = [transitioningContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *presentedControllerView = [transitioningContext viewForKey:UITransitionContextToViewKey];
UIView *containerView = [transitioningContext containerView];
presentedControllerView.frame = [transitioningContext finalFrameForViewController:presentedController];
CGPoint center = presentedControllerView.center;
center.y = containerView.bounds.size.height;
presentedControllerView.center = center;
[containerView addSubview:presentedControllerView];
// This returns nil
UIView *presentingControllerView = [transitioningContext viewForKey:UITransitionContextFromViewKey];
[UIView animateWithDuration:[self transitionDuration:transitioningContext] delay:0.0 usingSpringWithDamping:1.0 initialSpringVelocity:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
CGPoint presentedViewCenter = presentedControllerView.center;
presentedViewCenter.y -= containerView.bounds.size.height/2.0;
presentedControllerView.center = presentedViewCenter;
// This is where I want to move the presenting view controller.
// of course it does not work.
CGPoint presentingViewCenter = presentingControllerView.center;
presentingViewCenter.y -= containerView.bounds.size.height/2.0;
presentingControllerView.center = presentingViewCenter;
} completion:^(BOOL finished) {
[transitioningContext completeTransition:finished];
}];
}
viewForKey:UITransitionContextFromViewKey 返回nil。我覆盖了shouldRemovePresentersView 以在我的自定义UIPresentationController 中返回NO,但我仍然得到nil。我正在使用UIModalPresentationCustom 作为我正在呈现的视图的模态呈现样式。
编辑:
我意识到我可以通过在我的自定义UIPresentationController 中覆盖presentationTransitionWillBegin 方法来为呈现视图设置动画来实现相同的效果。但我想获得有关访问呈现视图控制器的答案。
编辑: 由于我找到了解决方案,因此澄清了我的问题:(1)这是预期的行为,即presentingViewController 在动画对象中将为零?
【问题讨论】:
-
您已经证明无法通过第一种方式完成,并且您知道如何通过第二种方式完成,因此目前尚不清楚您要问什么。您应该回答自己的问题,展示您的解决方案,然后继续前进。
-
@matt 见我上面的编辑 - “既然我找到了解决方案,澄清我的问题:(1)这是预期的行为,即presentingViewController 在动画对象中将为零?”
-
我回答了。
标签: objective-c ios8 uipresentationcontroller