UIPresentation控制器传递触摸事件



我正在尝试做一个从底部向上滑动到一定高度的自定义通知视图。我正在使用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 的视图上,而不是在顶部添加另一个控制器。

相关内容

  • 没有找到相关文章

最新更新