スキップしてメイン コンテンツに移動

hitTest

たとえばこんな状態になった時に、通常ならビューより下にあるボタンにはタッチできません。
スクリーンショット 2013-06-26 13.19.56


だけど、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はクラスを作らなくてはいけないので気をつけましょう。
こうすれば必要なものだけタッチ判定を無視することができます。

コメント

このブログの人気の投稿

日本に来た 今三週間

四月六日に日本に来た、今三週間になった。 嬉しくなかった、悲しくなかった。 日本の携帯電話のカメラはとてもいいよ、私は今撮影が好きだ、いつも寮に帰る途中で花とか魚とか写真を撮る。これも生活の趣味だ。 滴は綺麗だ 桜が凋んで落ちる 天気がいいとき、自転車に乗って、食材を買った。 自分で料理をつくる、おいしそうでしょう。 昨日清水寺に行った、天気はとても熱いね。日に焼けすぎたので、腕は今赤い。 側に花があるので、赤い清水寺はもっと美しそうだ。 木の色は艶やかだ。