4

パンジェスチャを確認するためのサンプルを作成します。

パンジェスチャは検出され、正常に機能しています。

しかし、パンジェスチャでsecondPointを指定すると、CGPoint secondPoint = [sender locationOfTouch:1 inView:self.imageView];クラッシュするようになります。

コンソールはメッセージを出している

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UIPanGestureRecognizer locationOfTouch:inView:]: index (1) beyond bounds (1).'

panGestureRecognizer.maximumNumberOfTouches = 1; panGestureRecognizer.minimumNumberOfTouches=1を使用する場合; それでもクラッシュしています。

私が使用するときpanGestureRecognizer.maximumNumberOfTouches = 2; panGestureRecognizer.minimumNumberOfTouches = 2; 、それは入っていません

- (void)panGestureHandler:(UIPanGestureRecognizer *)sender method.

誰かが私が間違っているところを教えてもらえますか?

よろしくお願いします。

私はこのように試みました。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureHandler:)];
     panGestureRecognizer.maximumNumberOfTouches = 2;
     [self.imageView addGestureRecognizer:panGestureRecognizer];

}
- (void)panGestureHandler:(UIPanGestureRecognizer *)sender
{
    if ([sender state] == UIGestureRecognizerStateBegan )
    {
        CGPoint firstPoint = [sender locationOfTouch:0 inView:self.imageView];
        CGPoint secondPoint = [sender locationOfTouch:1 inView:self.imageView];
    }
    else if ([sender state] ==UIGestureRecognizerStateEnded ) 
    {
    }

}
4

4 に答える 4

4

タッチの最大数と最小数が設定されているにもかかわらず、私もこのエラーに遭遇しました。私はジェスチャ認識エンジンをサブクラス化しており、それと関係があると考えています。numberOfTouches参照する前にチェックするだけで回避できました。

if ([gestureRecognizer numberOfTouches] > 0) {
    CGPoint point = [gestureRecognizer locationOfTouch:0 inView:self.superview.window];
}

これが誰かを助けることを願っています!

于 2013-03-23T16:36:33.620 に答える
4

を提供しましたmaximumNumberOfTouchesが、提供しませんでしminimumNumberOfTouchesた。すなわち、ジェスチャは、最初のタッチ後に認識できます。この場合、2 番目のタッチが存在しない可能性があり、1(2 番目の要素を参照する) インデックスが配列の境界を超えています。

于 2012-08-22T05:43:15.037 に答える
1

エラーは、この行で次のことを示しています。

    CGPoint secondPoint = [sender locationOfTouch:1 inView:self.imageView];

インデックス "1" はlocationOfTouches範囲外です。したがって、上記のように、必ず設定する必要がありますminimumNumberOfTouches

さらに、ジェスチャ レコグナイザーに応答するために、画像ビューでのユーザー操作を有効にする必要があります。

[self.imageView setUserInteractionEnabled:YES];
于 2012-08-22T06:58:11.737 に答える
1

最大/最小タッチが設定されると、アクションの送信を開始する有効なジェスチャであるかどうかが決定されますが、それを終了するための基準ではありません。たとえば、最大/最小を 2 に設定した場合。2 本指のタッチが検出されると、ハンドラーはアクションの受信を開始します。指を 1 本離してもジェスチャーは終了しません。ハンドラーは、change-state と 1 回のタッチで引き続きアクションを受け取ります。最終的に、ハンドラーは 0 タッチと終了状態を受け取ります。

于 2016-03-15T03:02:25.377 に答える