Mengonversi Radian ke Derajat menggunakan UIRotationGestureRecognizer?

Saya menggunakan UIRotationGestureRecognizer untuk memutar gambar. Saya ingin mengubah sudut rotasi dari Radian ke Derajat karena saya dapat berpikir lebih baik dalam derajat. Saya menemukan solusi di tumpukan dan sumber lain tetapi karena alasan tertentu solusi tersebut sepertinya tidak berhasil

Misalnya, ketika saya memutar gambar berlawanan arah jarum jam sekitar 45 derajat, saya mendapatkan nilai derajat sekitar -0,15 dari rumus???

@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 sumber
comment
Anda dapat memeriksa ini: stackoverflow.com/questions/2051811/   -  person Andreas Oetjen    schedule 11.07.2019


Jawaban (1)


Masalah utama Anda adalah Anda menyetel ulang properti rotation isyarat. Anda tidak harus melakukan itu. Dari dokumentasi:

Nilai rotasi adalah nilai tunggal yang bervariasi seiring waktu. Ini bukan nilai delta dari terakhir kali rotasi dilaporkan. Terapkan nilai rotasi ke keadaan tampilan saat isyarat pertama kali dikenali—jangan menggabungkan nilai setiap kali pengendali dipanggil.

Jadi hapus baris sender.rotation = 0.

Oleh karena itu, Anda perlu memperbaiki cara menerapkan transformasi ke tampilan gambar.

Mengganti:

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

dengan:

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

Itu menerapkan rotasi penuh alih-alih mencoba menambah rotasi saat ini.

person rmaddy    schedule 11.07.2019