Преобразование радианов в градусы с помощью UIRotationGestureRecognizer? - PullRequest
0 голосов
/ 11 июля 2019

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

1 Ответ

0 голосов
/ 11 июля 2019

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

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

Поэтому удалите строку sender.rotation = 0.

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

Заменить:

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

с:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...