问题描述
我已经能够创建自定义UIPresentationController并显示底部的页面,但是现在底部的页面似乎阻止了父/呈现视图控制器的所有手势。
这是一个模拟屏幕截图:
地图注释,菜单按钮(右上)和地图本身不响应手势,轻按平移或其他方式。搜索栏和segmentedControl选项卡工作正常。
这是我的UIPresentationController和Delegate:
class MapDrawerPresentationManager: NSObject {
}
extension MapDrawerPresentationManager: UIViewControllerTransitioningDelegate {
func presentationController(forPresented presented: UIViewController,presenting: UIViewController?,source: UIViewController) -> UIPresentationController? {
let presentationController = MapDrawerPresentationController(presentedViewController: presented,presenting: presenting)
return presentationController
}
}
class MapDrawerPresentationController: UIPresentationController {
var topGap: CGFloat = 88
override init(presentedViewController: UIViewController,presenting presentingViewController: UIViewController?) {
super.init(presentedViewController: presentedViewController,presenting: presentingViewController)
}
override public var frameOfPresentedViewInContainerView: CGRect {
return CGRect(
origin: CGPoint(x: 0,y: self.containerView!.frame.height/2),size: CGSize(width: self.containerView!.frame.width,// width of parent
height: self.containerView!.frame.height-self.topGap))
}
override public func containerViewWillLayoutSubviews() {
super.containerViewWillLayoutSubviews()
guard let presentedView = self.presentedView else { return }
presentedView.layer.masksToBounds = true
}
override public func containerViewDidLayoutSubviews() {
super.containerViewDidLayoutSubviews()
guard let presenterView = self.containerView else { return }
guard let presentedView = self.presentedView else { return }
presentedView.frame = self.frameOfPresentedViewInContainerView
presentedView.frame.origin.x = (presenterView.frame.width - presentedView.frame.width)
presentedView.center = CGPoint(x: presentedView.center.x,y: presenterView.center.y * 2)
}
以及我如何通过协调器呈现/初始化视图
lazy var presentationDelegate = MapDrawerPresentationManager()
func start() {
let mapViewController = MapViewController(nibName: nil,bundle: nil)
let drawerVC = MapPanModalViewController(nibName: nil,bundle: nil)
drawerVC.transitioningDelegate = mapViewController.presentationDelegate
drawerVC.modalPresentationStyle = .custom
presenter.pushViewController(mapViewController,animated: false)
presenter.present(drawerVC,animated: false)
}
我曾尝试从UIGestureRecognizerDelegate的“ shouldRecognizeSimultaneouslyWith”中恢复true,但是我不知道如何访问MapView和UIButton的内置手势以设置委托。
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)