Как установить вращение UIView по градусам - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь отразить данные акселерометра в приложении iOS, вращая объект UIImageView. В настоящее время я вращаю объект на основе разницы между его текущим положением и предыдущим положением (например, если акселерометр был под углом 90 градусов, а сейчас - под углом 80 градусов, он повернет объект на -10 градусов). Этот метод имеет проблемы, хотя из-за непрочитанных изменений в акселерометре.

Таким образом, Я хочу установить вращение UIImageView, основываясь на градусной ориентации акселерометра . Например, если акселерометр читает при 65 градусах, я хочу установить ориентацию объекта UIImageView в 65 градусов. Есть ли способ сделать это?

Кроме того, я хотел бы, чтобы вращение было анимированным.

Вот мой текущий код, который вращает объект просмотра изображения на основе изменения от предыдущего Чтение:

// UIImage view declaration
@IBOutlet weak var visualizer: UIImageView! 

// Rotation code where 'deg' is the change in rotation from the previous reading
UIView.animate(withDuration: 1.0, delay: 0, options: .curveLinear, animations: { () -> Void in self.visualizer.transform = self.visualizer.transform.rotated(by: CGFloat(truncating: deg))})

Обратите внимание, что я бы изменил другую часть своего кода, чтобы «град» был ориентацией акселерометра в градусах, а не изменением в градусах.

1 Ответ

0 голосов
/ 10 марта 2020

вращение основано на Radian, поэтому вам просто нужно выполнить математику

let radian = degree * CGFloat.pi / 180

, чтобы повернуть объект на n градусов, используя CGAffineTransform

 view.transform = CGAffineTransform(rotationAngle: (degree * CGFloat.pi / 180))
...