Skip to content

hitTestをオーバーライドして、UIViewのタッチ判定を無視して下のビューにタッチする

2013年6月26日

たとえばこんな状態になった時に、通常ならビューより下にあるボタンにはタッチできません。

スクリーンショット 2013-06-26 13.19.56

 

 

だけど、UIViewの「- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event」をオーバーライドすることで、タッチ判定を無視することができ、後ろに隠れているビューにもタッチすることができます。

しかも、指定のビューだけをスルーするので、画像にある「ue Button」にもタッチができるのです!スゴーイ。

コードは以下の感じ。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    
    // タッチされたビューを取得する
    UIView *hitView = [super hitTest:point withEvent:event];
    
    // タッチされたものがselfだったらイベントを発生させない
    if ( self == hitView )
    {
        return nil;
    }
    
    // それ意外だったらイベント発生させる
    return hitView;
}

もちろんオーバーライドする必要があるので、対象となるViewはクラスを作らなくてはいけないので気をつけましょう。

こうすれば必要なものだけタッチ判定を無視することができます。

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。