ขณะที่เบนกล่าวว่าคุณจะต้องทำงานร่วมกับUIView's
ชั้นโดยใช้การดำเนินการCATransform3D
layer's
rotation
เคล็ดลับที่จะได้รับมุมมองการทำงานเป็นอธิบายในที่นี้คือการหนึ่งในการเข้าถึงโดยตรงของเมทริกซ์cells
ของCATransform3D
(M34) คณิตศาสตร์เมทริกซ์ไม่เคยเป็นของฉันดังนั้นฉันไม่สามารถอธิบายได้อย่างชัดเจนว่าทำไมสิ่งนี้ถึงได้ผล แต่มันก็เป็นเช่นนั้น คุณจะต้องตั้งค่านี้ให้เป็นเศษส่วนเชิงลบสำหรับการแปลงเริ่มต้นของคุณจากนั้นให้ใช้การแปลงเลเยอร์หมุนของคุณกับสิ่งนั้น คุณควรทำสิ่งต่อไปนี้:
Objective-C
UIView *myView = [[self subviews] objectAtIndex:0];
CALayer *layer = myView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;
สวิฟท์ 5.0
if let myView = self.subviews.first {
let layer = myView.layer
var rotationAndPerspectiveTransform = CATransform3DIdentity
rotationAndPerspectiveTransform.m34 = 1.0 / -500
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0 * .pi / 180.0, 0.0, 1.0, 0.0)
layer.transform = rotationAndPerspectiveTransform
}
ซึ่งสร้างเลเยอร์เปลี่ยนจากรอยขีดข่วนสำหรับการหมุนแต่ละครั้ง
ตัวอย่างเต็มของนี้ (พร้อมรหัส) สามารถพบได้ที่นี่ที่ฉันได้ใช้การหมุนแบบสัมผัสและปรับขนาดสองสามCALayers
ตามตัวอย่างโดย Bill Dudney โปรแกรมรุ่นใหม่ล่าสุดที่ด้านล่างสุดของหน้าใช้การดำเนินการของเปอร์สเปคทีฟชนิดนี้ รหัสควรอ่านง่ายพอสมควร
sublayerTransform
คุณอ้างถึงในการตอบสนองของคุณคือการแปลงที่ใช้กับ sublayers UIView's
CALayer
ของคุณ หากคุณไม่มีเลเยอร์ย่อยไม่ต้องกังวลกับมัน ฉันใช้ sublayerTransform ในตัวอย่างของฉันเพียงเพราะมีสองสิ่งCALayers
อยู่ภายในเลเยอร์เดียวที่ฉันหมุน