我正在尝试创建一个自定义通知视图,从底部向上滑动到一定高度。我使用了一个
UIPresentationController
,但问题是当第二个VC被呈现时,呈现VC的触摸事件无法被检测到。有没有办法能够解决这个问题?
UIPresentationController
,但问题是当第二个VC被呈现时,呈现VC的触摸事件无法被检测到。有没有办法能够解决这个问题?
经过一些努力,我找到了答案。实际上,即使您的frameOfPresentedViewInContainerView
只占屏幕的一小部分,该框架所在的容器视图(containerView)的大小却是整个窗口。因此,我只需将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
}
}
如果您想要访问presentingViewController对象,您必须先关闭当前控制器。您可以通过向notificationController添加一个UITapGestureRecognizer
并使用该事件关闭通知来实现。
另一种可能的方法是将您的通知实现为UIView
而不是UIViewController
,并直接在您的viewController视图上显示它,而不是添加另一个控制器在其上方。
AlertFactory
一样的类,它实例化您的通知并使任何 ViewController 可以创建和显示它们。如果所有的 ViewControllers 都以相同的方式呈现通知,则可以创建一个 UIViewController 扩展来实现它,并且它将可从任何 VC 访问。 - jvrmed