加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 在点之间添加曲线的CGPath

发布时间:2020-12-16 07:04:48 所属栏目:百科 来源:网络整理
导读:所以我有一个随机生成一些CGPoints的函数,然后我从这些点创建一个CGPath.我在关键帧动画中使用此路径来为屏幕周围的视图设置动画. 使用以下代码生成路径: - (CGMutablePathRef)generatePathFromCoordinates:(NSArray *)coordinates{ CGMutablePathRef path
所以我有一个随机生成一些CGPoints的函数,然后我从这些点创建一个CGPath.我在关键帧动画中使用此路径来为屏幕周围的视图设置动画.

使用以下代码生成路径:

- (CGMutablePathRef)generatePathFromCoordinates:(NSArray *)coordinates
{
    CGMutablePathRef path = CGPathCreateMutable();
    CGPoint point = [(NSValue *)[coordinates objectAtIndex:0] CGPointValue];
    CGPathMoveToPoint(path,nil,point.x,point.y);

    for (int i=1; i < coordinates.count; i++)
    {
        point = [(NSValue *)[coordinates objectAtIndex:i] CGPointValue];
        CGPathAddLineToPoint(path,point.y);
    }

    return path;   
}

上面的代码工作得很好,但动画看起来有点奇怪,所以我想在坐标之间添加曲线而不是直线.如下图所示(我知道的惊人的绘画技巧!).路径’A’是我正在做的事情,路径’B’是我的目标:

在查看了CGPath引用中可用的函数之后,我可以看到一些可能完成工作的CGPathAddArcToPoint CGPathAddCurveToPoint.我有一个简短的使用这些功能,但无法获得所需的效果(可能是因为我使用不正确)

你们能指出我正确的方向来获得一个漂亮的曲线吗?

提前致谢

解决方法

CGPathAddCurveToPoint将一条三次曲线添加到贝塞尔曲线路径.在您不知道的情况下,它的制作方式是曲线的形状由两个控制点确定(使用曲线的三级方程).如果希望曲线具有特定形状,则需要计算两个中间点,偏向于路径当前点的值和曲线终点.相反,如果你不关心具有特定形状的曲线,你可以选择一些随机点.这是一个实现示例:

for (int i=1; i < coordinates.count; i++)
{
    point = [[coordinates objectAtIndex:i] CGPointValue];
    CGPathAddCurveToPoint(path,randomX(),randomY(),point.y);
}

我看到你使用了CGPath,但如果你觉得它更容易使用,你也可以使用OOP和UIBezierPath而不是CGPath.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读