Преобразование радианов в градусы с помощью UIRotationGestureRecognizer?

Я использую 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)
}

person jamesMcKey    schedule 11.07.2019    source источник
comment
Вы можете проверить это: stackoverflow.com/questions/2051811/   -  person Andreas Oetjen    schedule 11.07.2019


Ответы (1)


Основная проблема заключается в том, что вы сбрасываете свойство rotation жеста. Вы не должны этого делать. Из документации:

Значение вращения - это одно значение, которое меняется со временем. Это не значение дельты с момента последнего сообщения о вращении. Примените значение поворота к состоянию представления при первом распознавании жеста - не объединяйте значение при каждом вызове обработчика.

Так что удалите строку sender.rotation = 0.

В результате вам необходимо исправить способ применения преобразования к представлению изображения.

Заменять:

imageView.transform = imageView.transform.rotated(by: sender.rotation)

с участием:

imageView.transform = CGAffineTransform(rotatationAngle: sender.rotation)

Это применяет полное вращение вместо попытки увеличить текущее вращение.

person rmaddy    schedule 11.07.2019