在不移动位置的情况下,围绕中心旋转CAShapeLayer



我想在不移动目标c的情况下,围绕其中心点旋转CAShapeLayer。CAShapeLayer包含rect的UIBezierPath点。我不能轮换CAShapeLayer,因为我不知道怎么做。请告诉我如何在不移动它的位置的情况下围绕它的中心旋转。

这里有一些代码可以做到这一点:

//Create a CABasicAnimation object to manage our rotation.
CABasicAnimation *rotation = [CABasicAnimation animationWithKeyPath:@"transform"];
totalAnimationTime = rotation_count;
rotation.duration =  totalAnimationTime;
//Start the animation at the previous value of angle
rotation.fromValue = @(angle);
//Add change (which will be a change of +/- 2pi*rotation_count
angle += change;
//Set the ending value of the rotation to the new angle.
rotation.toValue = @(angle);
//Have the rotation use linear timing.
rotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
/*
 This is the magic bit. We add a CAValueFunction that tells the CAAnimation we are modifying
 the transform's rotation around the Z axis.
 Without this, we would supply a transform as the fromValue and toValue, and for rotations
  > a half-turn, we could not control the rotation direction.
 By using a value function, we can specify arbitrary rotation amounts and directions, and even
 Rotations greater than 360 degrees.
*/
rotation.valueFunction = [CAValueFunction functionWithName: kCAValueFunctionRotateZ];

/*
  Set the layer's transform to it's final state before submitting the animation, so it is in it's
  final state once the animation completes.
 */
imageViewToAnimate.layer.transform = CATransform3DRotate(imageViewToAnimate.layer.transform, angle, 0, 0, 1.0);
//Now actually add the animation to the layer.
[imageViewToAnimate.layer addAnimation:rotation forKey:@"transform.rotation.z"];

(该代码取自(并简化)我的github项目KeyframeViewAnimations

在我的项目中,我正在旋转UIImageView的层,但同样的方法也适用于任何CALayer类型。

最新更新