หมุนรูปภาพใน UIImageView ด้วย CGAffineTransform
ใช้ property transform ของ UIView ร่วมกับ CGAffineTransform หมุนรูปได้ง่ายๆ
ขั้นตอนที่ 1: สร้างโปรเจกต์
Xcode → Single View App → ชื่อ "RotateImage"
ขั้นตอนที่ 2: ออกแบบ UI ใน Storyboard
- UIImageView (วางรูปตัวอย่าง)
- UIButton 2 ตัว: "Rotate 90°" และ "Rotate 45°"
ขั้นตอนที่ 3: สร้าง IBOutlet และ IBAction
@IBOutlet var imageView: UIImageView!
@IBAction func rotate90button(_ sender: Any) {
imageView.transform = imageView.transform.rotated(by: CGFloat.pi / 2) // 90°
}
@IBAction func rotate45button(_ sender: Any) {
imageView.transform = imageView.transform.rotated(by: CGFloat.pi / 4) // 45°
}
คำอธิบาย
CGFloat.pi= 180 องศา (π เรเดียน)pi / 2= 90°,pi / 4= 45°,pi= 180°rotated(by:)สร้าง Transform ใหม่จาก Transform ปัจจุบัน (สะสมมุม)- ใช้
imageView.transform = .identityเพื่อ Reset กลับสถานะเดิม
ขั้นตอนที่ 4: รันทดสอบ
กดปุ่มทีละครั้ง จะเห็นรูปหมุนสะสมมุมไปเรื่อยๆ
ขยายความสามารถ
หมุนแบบ Absolute (ไม่สะสม)
// หมุนไปที่มุมที่กำหนดโดยตรง imageView.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2)
Animation หมุน
UIView.animate(withDuration: 0.5) {
self.imageView.transform = self.imageView.transform.rotated(by: .pi / 2)
}
หมุนรอบจุดกึ่งกลาง (Default) vs จุดอื่น
Default จะหมุนรอบ Center ของ View หากต้องการหมุนรอบจุดอื่น ต้องปรับ anchorPoint ของ Layer
สูตรแปลงองศาเป็นเรเดียน
func degreesToRadians(_ degrees: CGFloat) -> CGFloat {
return degrees * .pi / 180
}
// ใช้งาน:
imageView.transform = imageView.transform.rotated(by: degreesToRadians(30))