我使用跟随CGPathAddEllipseInRect的CAKeyframeAnimation沿着圆圈制作UIView。但是,视图似乎总是在同一个地方开始,无论它最初定位在哪个帧中。是否有某种方法可以调整路径上视图的起始位置?
谢谢!
CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
myAnimation.fillMode = kCAFillModeForwards;
myAnimation.repeatCount = 5;
myAnimation.calculationMode = kCAAnimationPaced;
myAnimation.duration = 10.0;
CGMutablePathRef animationPath = CGPathCreateMutable();
CGPathAddEllipseInRect(animationPath, NULL, rect);
myAnimation.path = animationPath;
CGPathRelease(animationPath);
[view.layer addAnimation:myAnimation forKey:@"changeViewLocation"];
答案 0 :(得分:0)
我认为不可能为CGPathAddEllipseInRect设置起点。 (至少我没有成功)
而不是使用: CGPathAddEllipseInRect , 您应该使用: CGPathAddArc!例如:
CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
myAnimation.fillMode = kCAFillModeForwards;
myAnimation.repeatCount = 5;
myAnimation.calculationMode = kCAAnimationPaced;
myAnimation.duration = 10.0;
CGMutablePathRef animationPath = CGPathCreateMutable();
NSInteger startVal = M_PI / 2;
//seventh value (end point) must be always 2*M_PI bigger for a full circle rotation
CCGPathAddArc(animationPath, NULL, 100, 100, 100, startVal, startVal + 2*M_PI, NO);
myAnimation.path = animationPath;
CGPathRelease(animationPath);
[view.layer addAnimation:myAnimation forKey:@"changeViewLocation"];
将从底部 - 顺时针方向旋转整圈。更改startVal值以更改旋转开始位置。 (完整旋转为2 * M_PI)。
答案 1 :(得分:0)
以前的答案是正确的并且有效,但应该有
CGFloat startVal = M_PI / 2;
而不是
NSInteger startVal = M_PI / 2;
否则,M_PI将四舍五入为整数,您将无法获得准确的角度。 附:对于评论上一个答案的声誉很低,抱歉。