iphone - para - cómo girar CALayer en un punto
como girar un video en la pc (3)
cómo girar CALayer en un punto seleccionado.
Echa un vistazo a la documentación de CA here .
Desea establecer la transformación en un CATransform3DRotate, por ejemplo:
CATransform3D current = myLayer.transform;
myLayer.transform = CATransform3DRotate(current, DEGREES_TO_RADIANS(20), 0, 1.0, 0);
- Define tu subcapa que quieres rotar;
- Establece sus
bounds
,position
en superlayer yanchorPoint
.anchorPoint
tiene coordenadas relativas y apunta a unanchorPoint
. Tu subcapa girará alrededor de este punto deanchorPoint
; - Añadir transformación.
Por ejemplo, para rotar una subcapa en su punto de vista central superior alrededor del centro inferior de la subcapa, use este código:
// 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)
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);
Donde el center
es el centro de su capa, el rotationAngle
está en radianes (el positivo es en sentido contrario a las agujas del reloj), y el punto de rotationPoint
es el punto alrededor del cual desea rotar. center
y rotationPoint
están en el espacio de coordenadas de la vista que contiene.