在modal viewcontroller外点击屏幕dismiss

自定义转场动画,弹出modalViewController,然后点击周围可以dismiss掉。
我的实现方法是:给self.view.window添加一个tap,在手势的代理中判断点击是否在controller内。

let tap = UITapGestureRecognizer(target: self, action: #selector(你的响应方法,实现为空即可))
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        tap.delegate = self
        self.view.window?.addGestureRecognizer(tap)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        tap.delegate = nil
        self.view.window?.removeGestureRecognizer(tap)
    }

实际的操作在这里:

extension XZBasicViewController: UIGestureRecognizerDelegate {
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        let point = gestureRecognizer.location(in: self.view)
        if !self.view.point(inside: point, with: nil) {
            self.navigationController?.dismiss(animated: true, completion: {
            })
            return true
        }
        return false
    }
}

你可能感兴趣的:(ios开发)