2016-07-18 17 views
0

すべてのタッチ、スワイプなどを処理するビューを作成しました。このビューは常に他のビューの上に表示され、デバイスの画面を覆います。私が望むのは、すべてのイベントを取得し、それらを透明な方法で処理するこのビューです。タッチを検出して処理して下のビューに送信するオーバーレイUIView

私が使用して試した

:私は- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)eventを使用することができ、戻りYES場合

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ 
    NSSet *tmpTouches = [event allTouches]; 

    if (tmpTouches.count == 1) 
     NSLog(@"1 tap detected"); 
    else if (tmpTouches.count == 2) 
     NSLog(@"w tap detected"); 
    else if (tmpTouches.count == 3) 
     NSLog(@"3 tap detected"); 

    UIView *hitTestView = [super hitTest:point withEvent:event]; 
    if (hitTestView) { 
     hitTestView = nil; 
    } 
    return hitTestView; 
} 

が、ノータッチはイベント次の方法で


で検出されている...などが、どのように送信しますタッチイベントを次のビューに戻します。リターンNOビューは、システムのために透明であるが、私は任意のタッチを取得しない場合は...

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ 
    return NO; 
} 

すべてのヘルプは理解されるであろう!

+0

ビューにジェスチャ認識機能を追加します。 – remyr3my

+0

これは、if(hitTestView){ hitTestView = nil; } return hitTestView; '' return nil; 'と言うのはちょっと遠いですか? –

+0

はい、そうですね。そうだろう:UIView * hitTestView = [super hitTest:point withEvent:event]; if(hitTestView) return hitTestView; return nil; –

答えて

0

メインビューにサブビューへの参照があります。あなたの接触をつかむためにtouchesBeganなどのメカニズムを使用してください。メインビューでは、サブビューのメソッドを直接呼び出して、そのイベントを処理します。つまり、メインビューはイベントを吸収し、サブビュー内の適切なメソッドを呼び出します。これは、2つのビュー間でイベントを分割しようとするよりも簡単になります。

+0

私はこの解決策について考えていましたが、それぞれのビューでタップ検出を追加するのは苦痛です...すべてのユーザーのやりとりを処理するためのクラス(UIView)アクティブビュー... –

+0

@Kyll。私はもうそれを編集することはできませんし、私はあなたのコメントをコメントしたいと思いません... –

+0

私はあなたのメインビューでユーザーのタッチを検出し、ちょうど状態を更新する必要があなたのサブビューでルーチンを呼び出すと言っている。タッチを下げる必要はありません。そのタッチの影響を受けるサブビュー内のルーチンを呼び出すだけです。 –

関連する問題