Я использую UIRotationGestureRecognizer для поворота изображения. Я хотел бы преобразовать угол поворота из радианов в градусы, потому что я лучше думаю в градусах. Я нашел решение в стеке и других источниках, но по какой-то причине решение не работает
Например, когда я поворачиваю изображение против часовой стрелки примерно на 45 градусов, я получаю значение градуса приблизительно -0,15 из формулы???
@objc func handleImageRotation(sender:
UIRotationGestureRecognizer){
guard sender.view != nil else{return}
if sender.state == .began || sender.state == .changed {
// rotation enacted
imageView.transform = imageView.transform.rotated(by: sender.rotation)
rotationAngleRads = sender.rotation
rotationAngleDegs = rad2Deg(radians: rotationAngleRads)
print("Degrees: \(rotationAngleDegs!)")
sender.rotation = 0
}
}
// Convert Radians to Degress
private func rad2Deg(radians: CGFloat) -> Double{
let angle = Double(radians) * (180 / .pi)
return Double(angle)
}





Ваша основная проблема заключается в том, что вы сбрасываете свойство rotation жеста. Вы не должны этого делать. Из документации:
The rotation value is a single value that varies over time. It is not the delta value from the last time that the rotation was reported. Apply the rotation value to the state of the view when the gesture is first recognized—do not concatenate the value each time the handler is called.
Поэтому удалите строку sender.rotation = 0.
В результате вам нужно исправить то, как вы применяете преобразование к представлению изображения.
Заменять:
imageView.transform = imageView.transform.rotated(by: sender.rotation)
с участием:
imageView.transform = CGAffineTransform(rotatationAngle: sender.rotation)
Это применяет полное вращение вместо того, чтобы пытаться увеличить текущее вращение.
Вы можете проверить это: stackoverflow.com/questions/2051811/…