如果另一个视图来自另一个视图控制器,是否可以通过使用 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”都会接管全屏。
如果您对解除的调用不会触发您的过渡委托方法,请确保在解除之前在该视图控制器上设置过渡委托。