私は現在、UIGestureRecognizers と競合しており、すべてが互いに適切に配置されています。画面上にいくつかの正方形 (UIView) があり、ユーザーがパンとピンチ (ビューのスケーリングに使用) を行うことができます。メイン ビューに UIPinchGestureRecognizer を追加し、正方形を追加して、焦点を合わせて正方形を拡大縮小できるようにしました。画面内で移動できるように、各正方形に UIPanGestureRecognizers も追加しました。この問題は、指が他の正方形を横切って移動しているときに、選択した正方形をつまんで拡大縮小すると明らかになります。私のデバッグに基づいて、つまんでいる指が焦点の合っていない四角形を横切ると、つまむジェスチャーをキャンセルするタッチを食べるようです。「[pan requireGestureRecognizerToFail: pinch]」の使用 ピンチを優先しますが、連続パン認識エンジンが起動しなくなったため、作成して発行します。また、 UIPinchRecognizer を正方形に直接追加しようとしましたが、これは機能しますが、ジェスチャには正方形の境界内にあるという制約があり、正方形が縮小されすぎるとうまく機能しません。これを回避する方法はありますか?私は何かが足りないのですか?
5791 次
1 に答える
3
問題を回避する 1 つの方法は、すべての UIGestureRecognizers (おそらくこのビューの UIViewController) に対して単一の共通デリゲートを設定することです。そのデリゲートは、ピンチ ジェスチャ レコグナイザーが「Began」または「Changed」状態 (つまり、ピンチを認識して処理していた) の場合、gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer に対して NO を返すことができます。これにより、ピンチ ジェスチャ中にパン ジェスチャ レコグナイザーがタッチを食べるのを防ぐことができます。
インターフェイス ファイルでは、ピンチ ジェスチャ レコグナイザーへの参照を保存する必要があります。
@interface MyViewController : UIViewController <UIGestureRecognizerDelegate> {
UIGestureRecognizer *pinchGestureRecognizer;
}
また、実装では、渡されるジェスチャ レコグナイザーの状態ではなく、ピンチ ジェスチャ レコグナイザーの状態を確認してください。
@implementation MyViewController
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if(pinchGestureRecognizer.state == UIGestureRecognizerStateBegan ||
pinchGestureRecognizer.state == UIGestureRecognizerStateChanged)
{
return NO;
}
else
{
return YES;
}
}
于 2010-10-26T19:30:40.737 に答える