1

许多应用程序具有这样的功能,用户可以下拉一个视图,然后从其下方显示另一个视图。但是第一个视图仍然在底部可见。(例如 Facebook Paper 应用程序)。

如果另一个视图来自另一个视图控制器,是否可以通过使用 iOS 7 的自定义视图控制器转换 API 来实现?

在我的测试中,可以做“展示”部分,但“解雇”部分有问题。每当我们调用dismissViewController 时,甚至在调用transitioningDelegate 方法之前,“toViewController”都会接管全屏。

有谁更熟悉这个?谢谢 !

4

1 回答 1

2

如果另一个视图来自另一个视图控制器,是否可以通过使用 iOS 7 的自定义视图控制器转换 API 来实现?

是的,这是可能的。您可以使用快照 API 拍摄任何 UIView 的快照。有了这个,您可以拍摄您正在转换的视图控制器的快照,然后将其添加到containerView您正在转换到的视图控制器下方。

例如,在-animateTransition:您的类的方法中,采用UIViewControllerAnimatedTransitioning您正在转换的视图控制器的快照并将其添加为您正在转换到的视图控制器下方的子视图:

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

    UIView * containerView = transitionContext.containerView;
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    // take snapshot of from view controller
    UIView * fromSnapshotView = [fromViewController.view snapshotViewAfterScreenUpdates:NO];
    [containerView insertSubview:fromSnapshotView belowSubview:toViewController.view];

    // Then do your animations on the to view controller to animate it into view as well as the fromSnapshotView

    // Finally, don't forget to call:
    [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}

在我的测试中,可以做“展示”部分,但“解雇”部分有问题。每当我们调用dismissViewController 时,甚至在调用transitioningDelegate 方法之前,“toViewController”都会接管全屏。

如果您对解除的调用不会触发您的过渡委托方法,请确保在解除之前在该视图控制器上设置过渡委托。

于 2014-03-24T18:36:29.987 回答