Modal存在和解雇的问题

时间:2018-03-06 15:24:16

标签: ios swift

我有一个ViewController,在主要内容的边缘有20个点填充。这是透明的颜色。

然后我使用以下内容将其作为Modal打开。

noteDetailController.modalPresentationStyle = .overCurrentContext present(noteDetailController, animated: false, completion: nil)

我的想法是,我会设置UITapGestureRecognizer以允许用户点按填充区域中的任意位置以关闭Modal

UITapGestureRecognizer

中的Modal ViewController会触及以下内容

self.parentController?.dismiss(animated: false, completion: nil)

我遇到的问题是,ViewController下面的Modal似乎正在响应按下屏幕,加载和解除Modals时存在重大延迟。

这种逻辑看起来是否正确,我是否按照您期望的方式做事?似乎presentdismiss开始发生不同步,并且加载了多个Modals

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

下面的视图控制器不应该是触摸事件,而另一个视图控制器放在它上面。

  1. 将模态控制器设置为类型:模态显示,演示文稿:当前上下文,并将segue调用为performSegue(withIdentifier: "showModal", sender: nil)
  2. 确保模态视图控制器的视图已选中“已启用用户交互”并具有清晰的彩色背景。
  3. 使用IBOutlet将模态的容器视图连接到模态视图控制器,将UITapGestureRecognizer添加到模态视图(填充)并实现UIGestureRecognizerDelegate方法以检测点击确实仅在填充中而不是在填充中容器视图本身:

    @IBOutlet weak var containerView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let tap = UITapGestureRecognizer(target: self, action: #selector(hide(gr:)))
        tap.delegate = self
        view.addGestureRecognizer(tap)
    }
    
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if let v = touch.view, v.isDescendant(of: containerView) {
            return false
        }
        return true
    }
    
    @objc func hide(gr: UITapGestureRecognizer) {
        dismiss(animated: true)
    }