1

UIButtonsこの状況で, UIScrollViewsetcを動作させるのに問題があります:

UIViewControllerのルートコントローラーであるbaseがありUIWindowます。そのレイヤーの上にUIViews、「中間レイヤー ビュー」と呼ぶ別のレイヤーを追加しました。その上にUIView、オーバーレイ オブジェクト用にもう 1 つ追加しました。

中間層ビューは、定期的に異なるビューに変更されます。使用UIViewするのはUIViewController、NIB ファイルによって作成された です。これが例です

if ( mode == eModeShowView1 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View1"...
else if ( mode == eModeShowView2 )
    UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View2"...

[UIView insertSubview:nextController.view below:m_overlayView];

今、私が画面に触れると、最初のレスポンダーは明らかに、触れOverlayViewられた の です。タッチ入力はビューチェーンを上りますが、中間層ビューとそれを完全にスキップしているようです。ルートにまっすぐジャンプします。UIResponderOverlayViewUIEventUIRespondersUIViewUIViewController

ここで何が起こっているか知っている人はいますか?

どういうわけか2つ作成することで解決できUIEventsますか?1 つはオーバーレイ ビュー用で、もう 1 つは中間層ビュー用ですか? それは可能ですか?もしそうなら、どのように?

どんな助けでも大歓迎です。ありがとう、リッチ

4

1 に答える 1

0

edit1 開始:

UITapGestureRecognizer を m_overlayView および initWithTarget:your-middleview action:some-method-in-middleview に配置できます

これで、ミドルビューで、認識機能を UIGestureRecognizerStateBegan、Ended などとして識別し、やりたいことを実行できます。

edit1終了:

デバッグできます。touchesbeganすべてのコントローラーでログを使用するだけです。タッチ応答のシーケンスをログに記録することで明らかになります。

わかりました..だから、ドキュメントからのメソッドのこの説明があなたに答えるかもしれません。あなたm_overlayViewとあなたnextController.viewはお互いを兄弟であり、スーパービューではありません。そのため、どちらかへのあなたのタッチは、もう一方には報告されず、代わりに両方の兄弟にsuperview共通のベースに報告されます.superview

したがって、中間層がバイパスされていることがわかります。実際、中間層は兄弟であり、スーパービューではありません。少なくともあなたが先に進むことを願っています;)

insertSubview:belowSubview:

ビュー階層内の別のビューの下にビューを挿入します。

(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview

パラメータ:

view

別のビューの下に挿入するビュー。superviewsiblingSubview の兄弟でない場合は、そのオブジェクトから削除されます。

siblingSubview :

挿入されたビューの上にある兄弟ビュー。

ディスカッション:

このメソッドは、ビューを保持し、次のレスポンダを新しい であるレシーバに設定しますsuperview

ビューはスーパービューを 1 つだけ持つことができます。ビューがすでに を持っていて、そのビューがレシーバーでない場合、このメソッドは、レシーバーを新しい にする前にsuperview、以前のビューを削除します。superviewsuperview

于 2011-06-14T11:17:22.837 に答える