今度は指でドラッグして回せるようにしました。
PanGestureRecognizerで画面上の指の位置を受け取り、
それを回転軸からの位置に変換して、角度を割り出しました。
回転するビューは、見た目は丸いですが、実体は四角なので、
そのままでは見えない角を触っても回ってしまいます。
そこで、回転するビューの point(inside: with:) -> Bool をオーバーライドして、
丸の外側ならfalseを返すようにしています。
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
let x = Float(point.x - midPoint.x)
let y = Float(point.y - midPoint.y)
let distance = CGFloat( sqrtf(x*x + y*y) ) // 中心からの距離
guard distance <= midPoint.x else {
return false // 丸の外側ならイベントを無視
}
return true
}
丸の内側からドラッグした場合は、丸からはみ出しても回転を続け、
逆に丸の外側からドラッグした場合は、丸に触れても回転しません。
この動作が自然かどうかはアプリのコンセプトによりますが、
ここでは、指が丸に触れている時だけ回転するようにしたいです。
内から外の場合は、ドラッグ中も point(inside: with:) -> Bool で判定を繰り返せばいいと思いますが、
外から内の場合は、どのようにするのか見当がつきません![]()
そのような働きのNotificationか何かがあるのでしょうか…。
ちょっとお昼寝します
![]()