【Swift】UITapGestureRecognizerをsubviewに効かせたくない、特定のviewにのみ効かせたい【iOS】

SwiftにてUIViewController.viewにのみにタップイベントを実装したいことがありました。具体的にはモーダル画面のサブビューにいろいろ画像などを配置し、背景タップでモーダル画面を閉じるという仕様です。

override func viewDidLoad() {
    super.viewDidLoad()
    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(hoge))
    view.addGestureRecognizer(tapRecognizer)
}

もちろんhogeメソッドは適宜実行するメソッドを当てはめてください。
上記コードを書いたところ、背景タップでイベントは発生したのですが、サブビューをタップしても同様のイベントが発生してしまったのです。
そこでどのviewをタップしたかを詳細に判別するにはUIGestureRecognizerDelegateを利用し、func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Boolを実装します。

override func viewDidLoad() {
        super.viewDidLoad()
        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(hoge))
        tapRecognizer.delegate = self
        view.addGestureRecognizer(tapRecognizer)
    }

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if touch.view == self.view {
            return true
        }
        return false
}

こうすることでUIViewController.viewのみにイベントが発生するようにできました。
UIGestureRecognizerDelegateについては以下のqiitaによくまとまっていました。
qiita.com


私たちはyyUXというUXレビューサイトを運営しています。あらゆるサービスのUX改善を目指しています。一度のぞいてみて下さい。よろしくお願いします。
www.yyux.jp