たとえばこんな状態になった時に、通常ならビューより下にあるボタンにはタッチできません。
だけど、UIViewの「- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event」をオーバーライドすることで、タッチ判定を無視することができ、後ろに隠れているビューにもタッチすることができます。
しかも、指定のビューだけをスルーするので、画像にある「ue Button」にもタッチができるのです!スゴーイ。
コードは以下の感じ。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ // タッチされたビューを取得する UIView *hitView = [super hitTest:point withEvent:event]; // タッチされたものがselfだったらイベントを発生させない if ( self == hitView ) { return nil; } // それ意外だったらイベント発生させる return hitView;} |
もちろんオーバーライドする必要があるので、対象となるViewはクラスを作らなくてはいけないので気をつけましょう。
こうすれば必要なものだけタッチ判定を無視することができます。
コメント
コメントを投稿