我正在尝试制作动画,
其中一个圆圈围绕 View 中心旋转。
我希望圆圈出现在点击手势的位置下方,因此我计算 View 中心与圆圈之间的距离和角度。
然后我在 CGPathAddArc 中为动画路径设置这些值。
这似乎工作得很好,但有时,在执行整个旋转后,圆圈会停止一会儿,然后重新启动。
玩了一圈,发现这一定和CGPathAddArc 函数的起止角度有关,因为设置-M_PI到M_PI这样的标准值不会导致问题。
我的代码是:
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath"position"];
pathAnimation.fillMode = kCAFillModeRemoved;
pathAnimation.removedOnCompletion = YES;
pathAnimation.duration = 4.0;
pathAnimation.repeatCount = HUGE_VALF;
CGMutablePathRef curvedPath = CGPathCreateMutable();
//get the angle and dinstance of location in relation to center of view (mathematics)
CGFloat angle = atan2f(location.y -self.view.center.y, location.x - self.view.center.x);
CGFloat distance = hypotf(location.x - self.view.center.x, location.y - self.view.center.y);
NSLog(@"angle: %f", angle);
CGPathAddArc(curvedPath, NULL, self.view.center.x, self.view.center.y, distance, angle, angle + 2 * M_PI, NO);
//Now we have the path, we tell the animation we want to use this path - then we release the path
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);
//Add the animation to the circleView - once you add the animation to the layer, the animation starts
[self.view addSubview:circle];
[circle.layer addAnimation:pathAnimation forKey"moveTheSquare"];
location 保存触摸事件的坐标,圆对象是在此代码段之前创建的。任何帮助将不胜感激。
Best Answer-推荐答案 strong>
添加它会使动画均匀平滑:
pathAnimation.calculationMode = kCAAnimationPaced;
刚刚测试过。
顺便说一句,计算不错。
希望这会有所帮助。
关于ios - CAKeyframeAnimation 对于 CGPathAddArc 的某些角度值停止,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/23330329/
|