对于某些情况,我建议阅读以下内容:

非常相关的问题:"From View Controller" disappears using UIViewControllerContextTransitioning
非常相关的答案:https://stackoverflow.com/a/25901154/751268

我正在尝试实现一个自定义视图控制器过渡,该过渡使新的视图控制器具有动画效果以覆盖一半的屏幕,同时将当前的视图控制器缩小到90%(位于窗口中居中,位于所显示的视图控制器下方)。

首先,我的问题是viewFromKey:返回了nil。为了解决这个问题,答案提到了:

如果要为呈现的视图控制器的视图设置动画,则应考虑使用UIModalPresentationFullscreen样式或继续使用UIModalPresentationCustom并通过UIPresentationController返回YES来实现自己的shouldRemovePresentersView子类。

我这样做了,viewFromKey:不再返回nil了,但是现在呈现的视图控制器完全消失了(考虑到我明确地说应该通过实现shouldRemovePresentersView来实现,这是有道理的)。

我将呈现视图控制器的视图添加到容器视图,但是仍然被删除。为了使它正常工作,我还有什么要做的吗?

这是一些相关的代码:

UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];

BOOL show = self.isPresentation;
UIView *menuView = show ? toView : fromView;
UIView *backView = show ? fromView : toView;

UIView *containerView = [transitionContext containerView];

[containerView addSubview:backView];
[containerView addSubview:dimmedView];
[containerView addSubview:menuView];

// Adjust transforms, alpha and perform animations

我以为通过从YES返回shouldRemovePresentersView并将其手动添加到containerView,应该可以解决此问题,但是无论如何backView都会被删除...

最佳答案

我要添加另一个答案,因为我的回复太长而无法在评论中显示。

首先viewForKey在iOS8中可用,因此除非您仅针对iOS8(为什么?),否则不应该使用它,或者在检查UIViewControllerContextTransitioning响应该选择器并为iOS7使用viewControllerForKey后再使用它。

话虽如此,在我看来这是一个错误,我解释了自己:

如果查看UIPresentationController头文件,您会看到它说

// Indicate whether the view controller's view we are transitioning from will be removed from the window in the end of the
// presentation transition
// (Default: YES)
- (BOOL)shouldRemovePresentersView;

因此,如您所见,默认值为YES,因此仅当您特别想说NO时,才应覆盖它。
但是,您是对的,没有将其显式设置为YES,则viewForKeyUITransitionContextFromViewControllerKey仍然为nil。

我认为您应该为此填写一个错误报告,现在使用viewControllerForKey可以很好地使用(这没什么问题),因为它不被弃用,并且可以在两个OS版本中正常工作。

而且这很可能是一个错误的原因是,当的viewForKey显式设置为而不是时,UITransitionContextFromViewControllerKey应该返回shouldRemovePresentersView 的视图。

我的2美分

关于ios - 在UIPresentationController中对呈现 View 进行动画处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26851471/

10-10 18:34
查看更多