iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】タップスルーなViewを作成する

このViewのタップイベントをスルーして、背面にあるViewをタップできるようにしたいという場面は、たまに遭遇するかと思います。今回はそんな場面で使えるSwiftの小ネタについて書こうかと思います👷‍♀️

結論

hitTest(_:with:)で受け取ったイベントが自分自身である場合は、タップイベントをスルーするUIViewのサブクラスを下記のように作りました。

class TapThroughView: UIView {
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let view = super.hitTest(point, with: event)
        
        if view == self {
            return nil
        }
        
        return view
    }
}

ちなみにhitTest(_:with:)は、タップされたView階層の最も深い位置(ルートとなるView)からサブビューへ、再帰的に呼び出されることでイベントを受信する最前のViewを見つけます。また、isHiddentrueだったり、isUserInteractionEnabledfalseだったり、alpha0.01未満の場合は、このメソッドは呼び出されません。

てな感じで本日も以上になります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com