0

UIViewController とそれに関連付けられた UIView があります。UIView にはいくつかのサブビューがあります。

UIViewController サブクラスで指定された長方形内のタッチ イベントを処理する方法は?

この処理は透過的である必要があります。UIView とそのサブビューは、指定された四角形と交差していても、タッチ イベントを受け取る必要があります。

PS

  1. ビュー コントローラで touchesBegan をオーバーライドしても機能しません。内部ビューはイベントを通過させません。
  2. UIView サブビュー リストの最後にカスタム ボタンを追加しても機能しません。内部サブビューはタッチ イベントを受け取りません。
4

3 に答える 3

0

touchesBegan / touchesMoved/touchesEndedはおそらく行く方法です。何をしようとしているのかによっては、UIGestureRecognizerもオプションになる場合があります。

サブビューがイベントを確実に渡すようにするには、サブビューでuserInteractionEnabledをYESに設定します。

UIViewはこれをデフォルトでYESに設定しますが、一部のサブクラス(特にUILabel)はこれをオーバーライドしてNOに設定します。

于 2010-07-26T20:11:15.190 に答える
0

ビューがデフォルトでイベントを通過させないからといって、必ずしもそうあるべきだとは限りません。

使用しているビューをサブクラス化し、イベントをビュー コントローラーに渡すことができます。

もう 1 つのアイデアは、文字通り、すべてのビューの上に透明なハンドラーを配置することです。つまり、ビューの上に透明な UIView を配置し、タッチ イベントを処理するだけでなく、それらを通過させます。これが実際に機能するかどうかはわかりませんが、機能するようです。

于 2010-07-26T20:19:27.140 に答える
0

ビューとそのコントローラーは、touchesBegan、touchesEnded、または touchesMoved を使用してタッチを処理できます。例として touchesBegan 内では、レスポンダー チェーン内の次のレスポンダーにイベントを渡すことを選択できます。このようにして、各ビューはタッチ イベントに基づいて何かを行う機会を得ることができます。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //do something here and then pass the event on
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}
于 2010-07-26T20:30:27.630 に答える