OGeek|极客世界-中国程序员成长平台

标题: ios - CAKeyframeAnimation 对于 CGPathAddArc 的某些角度值停止 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 21:50
标题: ios - CAKeyframeAnimation 对于 CGPathAddArc 的某些角度值停止

我正在尝试制作动画, 其中一个圆圈围绕 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-推荐答案


添加它会使动画均匀平滑:

pathAnimation.calculationMode = kCAAnimationPaced;

刚刚测试过。

顺便说一句,计算不错。

希望这会有所帮助。

关于ios - CAKeyframeAnimation 对于 CGPathAddArc 的某些角度值停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330329/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4