Handling Rotation Gestures

4602 ワード

https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_uikit_gestures/handling_rotation_gestures
"Measure the relative rotation of two fingers on the screen, and use that motion to rotate your content."
スクリーン上の2つの指の相対回転を測定し、対応する動きを使用して内容を回転させます.

Overview


回転ジェスチャーは、画面上の2本の指を1回ずつ回転させるときに発生する連続ジェスチャーです.回転ジェスチャーを検出するには、UIRotationGestureRecognizerを使用する必要があります.
以下の方法の1つでジェス・チャーリー・コグニゼを実現することができる.
  • コードの作成方法.ビューのaddGestureRecognizer(_:)メソッドを呼び出します.
  • インタフェースビルダーで実装する方法.ライブラリから適切なオブジェクトをドラッグしてビューに配置します.

  • アプリケーションで、入力として回転動作を使用する場合は、回転ジェスチャーレコーダを使用します.回転ジェスチャーは、通常、画面上でオブジェクトを操作するために使用されます.たとえば、ビューを回転したり、カスタムコントロールの値を更新したりするときに使用します.回転ジェスチャーは連続しています.したがって,回転値が変化するたびに動作方法が呼び出され,コンテンツの更新の余地が与えられる.
    スケッチャーコーナーは、回転値を半径方向に通知します.指の間が直線である場合、指の初期位置に作成された直線は測定の開始点を表し、回転角度は0です.指が移動すると、各指の新しい位置の間に新しい線が作成されます.スケッチャーコーナー(Sketer Corner)は、初期の直線と各直線の角度を測定し、結果を回転アトリビュートに配置します.
    回転ジェスチャースキャナは、回転開始を指示することにより、ユーザの指位置が変化したときにUIGestureRecognizer.State.began状態に入る.初期変更が完了すると、その後の変更により「ジェストゥリコガー年齢」がUIGestureRecognizer.State.changedの状態になり、回転角度が更新されます.指がスクリーンから離れると、ジェスチリコグニゼはUIGestureRecognizer.State.endedの状態に入ります.
    Important
    回転値をコンテンツに適用する場合は、特に注意してください.これは予想外の結果をもたらす可能性があります.「ジェスチリコグニゼ」によって報告された回転は、現在の指位置と初期指位置との間の角度を表す.各新しい回転値をコンテンツに適用すると、回転速度が速すぎます.代わりに、コンテンツの既存の値をキャッシュし、既存の値に回転を適用し、コンテンツに新しい値を再適用する必要があります.もう1つの方法は、新しい変更が有効になった後、回転要素を0.0にリセットすることです.
    リスト1は、ユーザの指に沿ってビューを回転させる方法を示します.この方法では、現在の回転要素をビューの変形に適用し、スケッチャーアノテーションの回転アトリビュートを0.0にリセットします.回転要素をリセットすると、スケッチャーの年齢値を再設定した後に変更したサイズを通知できます.これは、ビューが線形に回転するだけです.
    Listing 1 Rotating a view
    @IBAction func rotatePiece(_ gestureRecognizer : UIRotationGestureRecognizer) {   // Move the anchor point of the view's layer to the center of the 
       // user's two fingers. This creates a more natural looking rotation. 
       guard gestureRecognizer.view != nil else { return }
            
       if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
          gestureRecognizer.view?.transform = gestureRecognizer.view!.transform.rotated(by: gestureRecognizer.rotation)
          gestureRecognizer.rotation = 0
       }}
    不正なコードが呼び出されていないか、実行されていない場合は、次の条件がtrueであるかどうかを確認し、変更が必要な場合は変更します.
  • ビューのisUserInteractionEnabledプロパティがtrueであることを確認します.デフォルトでは、画像ビューとラベルはfalseです.
  • 少なくとも2つの指がスクリーンに触れていることを確認します.回転要素が
  • コンテンツに正しく適用されていることを確認します.同じ回転値を少なくとも2回適用すると、大きな回転が発生します.この問題を解決するには、現在の回転値をコンテンツに適用し、回転アトリビュートを0.0に設定する必要があります.