Handling Pinch Gestures

4679 ワード

https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_uikit_gestures/handling_pinch_gestures
"Track the distance between two fingers and use that information to scale or zoom your content."
2つの指の間の距離を追跡し、この情報をコンテンツのスケールまたは拡大に使用します.

Overview


フィンチジェスチャーは、タッチスクリーンの前の2つの指の間の距離を追跡するための連続したジェスチャーです.フィンチジェスチャーを検出するには、UIPinchGestureRecognizerクラスを使用する必要があります.
ジェスチリコグニゼの実現は以下の方法の1つを通過することができる.
  • コードを記述することによって実装する方法.ビューのaddGestureRecognizer(_:)メソッドを呼び出します.
  • インタフェースビルダーで実装する方法.ライブラリから適切なオブジェクトをドラッグしてビューに配置します.

  • フィンチタッチパネルでは、タッチスクリーンの2本の指の距離を変更するよう求められます.フィンチジェスチャーは連続しているので、指の間の隙間が変わるたびに動作方法が呼び出されます.指の間の距離は、スケール要素で表されます.スケッチの開始時にスケール係数は1.0です.2つの指の間の距離が大きくなると、スケール要素は比例的に増加します.同様に、指の間隔が小さくなると、スケール要素も小さくなります.フィンチジェスチャーは、主に画面に表示されるオブジェクトまたはコンテンツのサイズを変更するために使用されます.たとえば、マップビューでは、グリップジェスチャーを使用してマップの拡大レベルを変更します.
    フィンチジェストゥリコグナイジャーは、2本の指の間の距離が初めて変わったときだけ、UIGestureRecognizer.State.began状態に入る.これらの初期変更の後、間隔の後続の変更は、スケッチャーのステータスをUIGestureRecognizer.State.changedに維持し、スケール要素を更新します.指がスクリーンから離れると、ジェスチリコ・グナゼはUIGestureRecognizer.State.endedに入ります.
    Important
    コンテンツにフィンチジェストゥリコナのスケール要素を適用するときに注意しないと、予想外の結果が生じる可能性があります.アクションメソッドを複数回呼び出すため、現在のスケール要素をコンテンツにのみ適用することはできません.以前にアクションメソッドで呼び出されたスケールコンテンツの現在の値に新しいスケール値を乗算すると、コンテンツはジオメトリレベルで増加または減少します.代わりに、コンテンツの既存の値をキャッシュし、[スケール](Scale)要素を既存の値に適用する必要があります.また、新しい値をコンテンツに適用する必要があります.別の方法は、各変更を適用した後、[スケール](Scale)要素を1.0にリセットすることです.
    Listing 1では、フィンチのスケッチを使用してビューの線形サイズを調整する方法について説明します.この方法では、現在のスケール要素をビューの変形に適用し、スケッチャーのスケールアトリビュート(Scale Attributes)を1.0にリセットします.[スケール](Scale)要素をリセットすると、値の再設定後にスケッチャーの年齢が変更されたサイズのみを通知するようになります.これは、ビューの線形スケールのみをもたらします.
    Listing 1 Scaling a view
    @IBAction func scalePiece(_ gestureRecognizer : UIPinchGestureRecognizer) {   guard gestureRecognizer.view != nil else { return }
    
       if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
          gestureRecognizer.view?.transform = (gestureRecognizer.view?.transform.
                        scaledBy(x: gestureRecognizer.scale, y: gestureRecognizer.scale))!
          gestureRecognizer.scale = 1.0
       }}
    呼び出しがないか、フィンチジェストゥリコンナのコードを正しく記述できない場合は、次の条件がtrueであるかどうかを確認し、必要に応じて変更します.
  • ビューのisUserInteractionEnabledプロパティがtrueに設定されていることを確認します.デフォルトでは、画像ビューとラベルはfalseです.
  • 少なくとも2つの指がスクリーンに触れていることを確認します.
  • コンテンツにズーム要素が正しく適用されていることを確認します.現在の値に単純にスケール要素を適用すると、値の幾何級数が増加します.