1

私は典型的なiOSインターフェースを持っていません。実用的ではないかもしれませんが、やってみます。誰かが助けてくれることを願っています!

UIVIew の形式のメニューがあります。5 つの小さな UIImageView が含まれています。UIPinchGestureRecognizer が UIVIew にアタッチされています。内側につまむと、5 つの UIImageView が画面外からアニメーション化し、ウィンドウの中央に円を形成します。外側につまむと、アニメーションが画面外に戻ってきます。そこではすべてがうまく機能します。

アプリケーションの任意の時点で、画面をピンチしてメニューを表示し、「ボタン」(UIImageView) の 1 つを選択して、関連するサブビューをロードできるようにしたいと考えています。

本当の問題は、現在表示されているビューが UIScrollView または UITableView の場合、メニューまたは他のサブビューがタッチ イベントを処理する必要があるかどうかをアプリが判断できないことです。本当に集中して、正確に同時に 2 本の指で画面に触れるようにすると、ピンチが機能してメニューが内側に引き出されます。それ以外の場合は、現在表示されているビューをスクロールしようとします。

ピンチ ジェスチャ (およびメニューが表示されているときのタップ ジェスチャ) を除くすべてのイベントが、メニュー ビューを通過して残りのサブビューに渡されるようにします。

イベントを処理するための正しいビューを決定するために hitTest:withEvent メソッドをオーバーライドできることは理解していますが、現時点ではそれを正確に使用する方法は不明です。Appleのドキュメントも、スタックオーバーフローについて読んだ回答も、この方法を明確にしていません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

UITableView は UIScrollView のサブクラスであるため、ジェスチャー認識機能を含む UIScrollView のすべてのプロパティを継承します。

UIScrollView は UIPinchGestureRecognizer と UIPanGestureRecognizer を宣言します。実装の詳細はわかりませんが、テーブルビューをズームできるはずがないため、UITableView がピンチ ジェスチャ認識機能を無効にしていると思います。

いずれにせよ、独自の UIPinchGestureRecognizer をテーブル ビューにアタッチできます。

UIPinchGestureRecognizer *yPGR = [[UIPinchGestureRecognizer alloc]
initWithTarget:probablySelf action:yourMenuShowSelectorHere];

UITableView *tv = ...
// ...
[tv addGestureRecognizer:yPGR];

次に、ピンチが失敗するまで UITableView scoll がスクロールしないことを確認できます。

[tv.panGestureRecognizer requireGestureRecognizerToFail:yPGR];

このように、UITableView は、ピンチが検出されていないことを確認するまでスクロールしません。

編集: UIScrollView は、iOS 5 以降で UIGestureRecognizers のみを使用 (または少なくともパブリックアクセスを宣言) します。

于 2012-08-24T10:48:04.447 に答える