UIPresentationController 传递触摸事件
Posted
技术标签:
【中文标题】UIPresentationController 传递触摸事件【英文标题】:UIPresentationController passing touch event 【发布时间】:2017-10-12 14:16:06 【问题描述】:我正在尝试做一个从底部向上滑动到某个高度的自定义通知视图。我正在使用UIPresentationController
,但问题是当第二个 VC 出现时,ViewController
上出现 VC 的触摸事件未被检测到,有没有办法做到这一点?
Here is a visual example of whats happening
【问题讨论】:
你写过代码吗?如果是的话,用您现有的解决方案/代码更新您的问题会很酷 【参考方案1】:好吧,经过一番挣扎我得到了答案,发生的事情是即使你的frameOfPresentedViewInContainerView
是屏幕的一小部分,containerView的那个frame的大小是整个窗口,所以我只是改变了containerView的frame与frameOfPresentedViewInContainerView
相同,现在您可以与两个控制器进行交互,希望对某人有所帮助。这是一个例子:
class AlertPresentationController: UIPresentationController
override var frameOfPresentedViewInContainerView: CGRect
guard let container = containerView else
fatalError("Error presenting Alert Controller")
let frameHeight: CGFloat = presentingViewController.view.frame.height * 0.2
return CGRect(x: 0, y: 0, width: container.frame.width, height: frameHeight)
override func presentationTransitionWillBegin()
containerView?.frame = frameOfPresentedViewInContainerView
【讨论】:
这个解决方案是救命稻草 我可以通过阅读这个答案来理解传递触摸事件的概念。谢谢!【参考方案2】:如果您想访问presentingViewController 对象,您必须先关闭当前控制器。您可以通过将 UITapGestureRecognizer
添加到您的 notificationController 并使用该事件关闭通知来做到这一点。
另一种可能的方法是将通知实现为UIView
而不是UIViewController
,并将其直接显示在 viewController 的视图上,而不是在顶部添加另一个控制器。
【讨论】:
我知道你的意思,我曾经将这些类型的警报创建为 UIView,但问题是我想通过应用程序中的所有 ViewController 使用该警报 创建一个类似AlertFactory
的类,它实例化您的通知并为任何 ViewController 提供创建和显示它们的可能性。如果你所有的 ViewController 都以相同的方式显示通知,你可以创建一个 UIViewController 扩展来实现它,它可以从任何 VC 访问以上是关于UIPresentationController 传递触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
UIPresentationController 在巨大延迟后呈现
UIPresentationController 传递触摸事件
拖动以关闭 UIPresentationController
iOS 上的自定义 UIPresentationController