0

UIPinchGestureRecognizer水平スケールと垂直スケールの両方が必要なため、'sメソッドでタッチを検出しようとしています。ピンチでは、それに応じて画像のサイズを変更する必要があります。たとえば、ユーザーが指を水平方向にのみ動かす場合、ビューの幅のみのサイズを変更します。

正常に動作していますが、画面を指で触れると、ほとんどの場合、アプリがSIGABRTでクラッシュし、メッセージが表示されません。

私のコードは次のとおりです。

    if (recognizer.state == UIGestureRecognizerStateBegan) {
        previousHorizontalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].x - [recognizer locationOfTouch:0 inView:recognizer.view].x);
        previousVerticalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].y - [recognizer locationOfTouch:0 inView:recognizer.view].y);
    }
    CGFloat horizontalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].x - [recognizer locationOfTouch:0 inView:recognizer.view].x);
    CGFloat verticalPinchDistance = ABS([recognizer locationOfTouch:1 inView:recognizer.view].y - [recognizer locationOfTouch:0 inView:recognizer.view].y);

クラッシュは、私が設定した行で発生しhorizontalPinchDistanceます。なぜですか?ありがとう!

4

1 に答える 1

3

その間に、私はクラッシュの理由を見つけました。

ユーザーが指を離しても、ピンチレコグナイザーのメソッドが呼び出されます(または、ユーザーが両方の指を同時に持ち上げない場合)。問題はnumberOfTouches、2ではなく1になることです。したがって、メソッド呼び出しのインデックス1[recognizer locationOfTouch:1 inView:recognizer.view]は範囲外になります。したがって、私の質問のコードのブロックは、の場合にのみ実行する必要がありますrecognizer.numberOfTouches > 1

于 2013-01-23T13:34:12.370 に答える