弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿
Posted
技术标签:
【中文标题】弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿【英文标题】:How can I schedule a new presentation in transitionCoordinator after popover dismissal 【发布时间】:2014-11-05 21:00:59 【问题描述】:我正在更新我的应用程序以支持 ios 8。在某些地方,我会在弹出框关闭后进行模态演示。这是我用于 iOS 7 的代码
[self.POP dismissPopoverAnimated:YES];
// initialization code for self.SMVC
MPTAdvancedSearchNav* nav = [[MPTAdvancedSearchNav alloc]initWithRootViewController:self.SMVC];
nav.modalPresentationStyle = UIModalPresentationFormSheet;
[self.navigationController presentViewController:nav animated:YES completion:nil];
当我在 iOS 8 设备上运行此程序时,我看到 UIModalPresentationFormSheet 动画开始之前有延迟(大约 1/4 秒)。
我做了一些研究,发现这个 WWDC 视频 https://developer.apple.com/videos/wwdc/2014/#214(第 29 分钟)说我应该使用过渡协调器在弹出框关闭后安排新的演示文稿。
问题是,我不知道该怎么做。我想我应该使用
- (void)notifyWhenInteractionEndsUsingBlock:(void (^)(id<UIViewControllerTransitionCoordinatorContext> context))handler
这是我应该使用的方法吗?另外,我如何获得 UIViewControllerTransitionCoordinatorContext
【问题讨论】:
【参考方案1】:不幸的是,Popovers 仅在 iOS 8 中转换为“演示样式”,因此您仍然需要用于 iOS 7 的旧代码,并在其中为 iOS 8 特定代码提供一个 fork。最重要的是,为了让一切正常工作,您必须放弃 UIPopoverController,因为它不继承自 UIPresentationController,这是在 iOS 8 中专门为弹出框挂钩到过渡系统的要求。 UIPopoverController 在 iOS 8 中所做的只是包装 UIPopoverPresentationController。
但是,我认为有一个更简单的解决方案可以在 7 和 8 中很好地工作:让任何正在创建/呈现 MPTAdvancedSearchNav 的类成为 UIPopoverController 的代表,并实现 didDismissPopover:,并将您的代码移到那里将进行演示。
在此处查看文档,让我知道它是如何工作的 - https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIPopoverControllerDelegate_protocol/index.html#//apple_ref/doc/uid/TP40009307
【讨论】:
谢谢,这很有帮助。我将解雇从动画更改为不动画,现在效果很好。以上是关于弹出框关闭后如何在 transitionCoordinator 中安排新的演示文稿的主要内容,如果未能解决你的问题,请参考以下文章