如何在一個選定點上旋轉CALayer。如何在一個點上旋轉CALayer
18
A
回答
34
CATransform3D transform = CATransform3DIdentity;
transform = CATransform3DTranslate(transform, rotationPoint.x-center.x, rotationPoint.y-center.y, 0.0);
transform = CATransform3DRotate(transform, rotationAngle, 0.0, 0.0, -1.0);
transform = CATransform3DTranslate(transform, center.x-rotationPoint.x, center.y-rotationPoint.y, 0.0);
哪裏center
是您層的中心,rotationAngle
是弧度(正面是逆時針),並且rotationPoint
是點你想旋轉。 center
和rotationPoint
位於包含視圖的座標空間中。
1
2
- 定義要旋轉你的子層;
- 設置它的
bounds
,position
在超級層和anchorPoint
。anchorPoint
有相對座標並且指向anchorPoint
。您的子圖層將圍繞此旋轉anchorPoint
; - 添加轉換。
例如,爲了對圍繞子層的底部中心它的父頂部中心點旋轉的子層,使用以下代碼:
// 1
let rect = CGRect(x: 0,
y: 0,
width: 20,
height: 20)
let path = UIBezierPath(rect: rect)
let sublayer = CAShapeLayer()
sublayer.fillColor = UIColor.green.cgColor
sublayer.path = path.cgPath
superlayer.addSublayer(sublayer)
// 2
sublayer.bounds = rect
sublayer.position = CGPoint(x: superlayer.bounds.size.width/2, y: 0)
sublayer.anchorPoint = CGPoint(x: 0.5, y: 1)
// 3
let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
rotationAnimation.toValue = 2*CGFloat.pi
rotationAnimation.duration = 3
rotationAnimation.fillMode = kCAFillModeForwards
rotationAnimation.isRemovedOnCompletion = false
sublayer.add(rotationAnimation, forKey: nil)
相關問題
- 1. CALayer的重繪上旋轉
- 2. 如何在當前位置旋轉CALayer?
- 3. 旋轉CALayer 90度?
- 4. 函數在另一個點上旋轉一個點
- 5. 如何在中心點android上旋轉一個imageview
- 6. 如何在旋轉後找到圖像上的一個點?
- 7. 如何在中心點上旋轉一個android圖標?
- 8. 如何讓相機在一個點上旋轉?
- 9. 如何繞一個點旋轉SCNNode?
- 10. CALayer圍繞中心旋轉
- 11. 的CALayer與旋轉動畫
- 12. 旋轉NSImageView的CALayer 90度
- 13. 突起的CALayer的旋轉
- 14. 如何轉換(旋轉)已存在的CALayer /動畫?
- 15. 如何在CALayer上進行轉換?
- 16. 圍繞一個點旋轉
- 17. OpenGL旋轉一個點
- 18. 如何在Java中圍繞一個點旋轉多邊形/點
- 19. 如何旋轉某個點的頂點?
- 20. 圍繞另一點旋轉一個點
- 21. 圍繞另一點旋轉一個點
- 22. 在錨點上旋轉div?
- 23. 在圖像上設置一個點作爲旋轉點Pygame.transform.rotate()
- 24. 如何旋轉一個div
- 25. 如何跟蹤旋轉MovieClip上的點?
- 26. 如何計算旋轉軸上的點?
- 27. 如何永久性地讓CALayer在最終位置旋轉?
- 28. 如何在任何角度旋轉一個點?
- 29. 在HTML畫布中旋轉一個點
- 30. 如何將一個精靈旋轉到一個點?
感謝warrenm其工作....... – 2010-10-14 11:37:37
你救了我的日子!謝謝!! – 2013-04-26 21:29:28