我正在尝试做一个从底部向上滑动到一定高度的自定义通知视图。我正在使用UIPresentationController
但问题是,当呈现第二个 VC 时,未检测到呈现 VC 的ViewController
上的触摸事件,有没有办法做到这一点?
这是正在发生的事情的视觉示例
,经过一番挣扎,我得到了答案,发生的事情是,即使您frameOfPresentedViewInContainerView
它是屏幕的一小部分,容器视图对该框架的大小是整个窗口,所以我只需将containerView的框架更改为与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
}
}
如果要访问 presentingViewController 对象,必须先关闭当前控制器。为此,您可以向通知控制器添加一个UITapGestureRecognizer
,并关闭包含该事件的通知。
另一种可能的方法是将通知实现为UIView
而不是UIViewController
,并直接将其显示在 viewController 的视图上,而不是在顶部添加另一个控制器。