0

ターゲットとセレクターを備えたUIGestureRecognizersをいくつか追加しています。もう一方はきっと同じになるので、一方についてだけ話します。

UIPinchGestureRecognizerを追加しました

UIPinchGestureRecognizer *pinch = [UIPinchGestureRecognizer new];
[pinch addTarget:self action:@selector(pinchGestureDetected:)];
[self.view setMultipleTouchEnabled:YES];
[self.view addGestureRecognizer:pinch];

ここでの私の目標は、ピンチジェスチャを受け取ったときにこのメソッドを1回呼び出すことです。しかし、明らかに、人がつまむようにそれを呼び続けます。ページナビゲーションの一部として使用しており、ピンチインが検出されたときにビューを更新します。

したがって、私の-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinchメソッドでは、別のメソッドを呼び出します。ちょっと...そしてこれは少しsudoです

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1) layoutViewWithMoreDetail;
else layoutViewWithLessDetail;
}

したがって、このメソッドを呼び出し続けることは望ましくありません。そうしないと、layoutメソッドが引き続き呼び出されます。1つのレイアウト/ピンチジェスチャが必要です。

スケールが決まったらピンチの検出をやめる方法はありますか?途中で何か...

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1)
{
layoutViewWithMoreDetail;
stop receiving pinch gestures till this.gesture is finished;
}

GestureDelegateを暗示しますか?

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1 && pinching == NO )
{
layoutViewWithMoreDetail;
pinching = YES;
}

そして、ジェスチャーのデリゲートで終了しました...ピンチ= NO;

助けてくれてありがとう

4

1 に答える 1

2

UPinchGestureRecognizerは継続的なジェスチャです-if(pinch.state == UIGestureRecognizerStateBegan)イベントがちょうど今始まっているかどうかを検出するために使用します。

ただし、これにより、イベントをトリガーするためのしきい値が低くなります。別の方法は、次のように、満足のいくようにトリガーされたときにジェスチャをすばやく無効にして有効にすることです。

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
    if (pinch.scale > 1)
    {
        //do your stuff here
        pinch.enabled = NO;
        pinch.enabled = YES;
    }
}

これは、ドキュメントを見ると、次のように記載されているためです。

有効

ジェスチャレコグナイザが有効かどうかを示すブールプロパティ。@property(nonatomic、getter = isEnabled)BOOLが有効

討論

ジェスチャ認識機能を無効にして、タッチを受け取らないようにします。デフォルト値はYESです。ジェスチャレコグナイザが現在ジェスチャを認識しているときにこのプロパティをNOに変更すると、ジェスチャレコグナイザはキャンセル状態に移行します。

于 2012-12-07T23:08:52.047 に答える