กำลังแปลงเรเดียนเป็นองศาโดยใช้ 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