【问题标题】:UIBezierPath support for relative paths?UIBezierPath 支持相对路径吗?
【发布时间】:2020-06-12 10:21:59
【问题描述】:

我阅读了UIBezierPath 对象的 Apple 文档。我是否正确理解它不支持相对路径?

我正在尝试将此 svg 路径转换为 ​​UIBezierPath:

// svg path
m90 36c-7 0-13 6-13 13s6 13 13 13 13-6 13-13-6-13-13-13zm-27 32c-7 0-13 6-13 13s6 13 13 13 13-6 13-13-6-13-13-13z

我开始:

UIBezierPath* myPath = [UIBezierPath bezierPath];
CGPoint currentPoint;

[myPath moveToPoint:CGPointMake([self sizeDependendX:90], [self sizeDependendY:36])];
currentPoint = CGPathGetCurrentPoint(myPath.CGPath);
[myPath addCurveToPoint:CGPointMake(currentPoint.x - 13, currentPoint.y + 13)
          controlPoint1:CGPointMake(currentPoint.x +  7, currentPoint.y +  0)
          controlPoint2:CGPointMake(currentPoint.x - 13, currentPoint.y +  6)];
currentPoint = CGPathGetCurrentPoint(myPath.CGPath);
[myPath addCurveToPoint:CGPointMake(currentPoint.x + 13 ,currentPoint.y + 13)
          controlPoint1:CGPointMake(currentPoint.x +  0, currentPoint.y +  7)
          controlPoint2:CGPointMake(currentPoint.x +  6, currentPoint.y + 13)];
...

真的是这样吗?还是我错过了什么?

【问题讨论】:

    标签: ios uibezierpath


    【解决方案1】:

    确实,只有没有“相对”点。

    (如果真的需要,制作扩展、函数或其他一些糖以使其整洁是微不足道的。在 Swift 中,我通常有类似的东西

    go(across: 7.0, down: -2.5)
    go(across: 4.0, down: -2.5)
    go(across: 7.0, down: -2.5)
    

    .. 之类的。您想要的功能或扩展只需要几行代码。)

    很抱歉带来坏消息! :)


    我们做了很多与贝塞尔相关的事情,下面是一些典型代码对我们的看法。我使用了无数个辅助调用,以便代码更有意义。

    我想说,在编写代码以创建复杂的贝塞尔曲线材料时,确实必须建立在 Apple 的原语之上。

    【讨论】:

    • 感谢“坏消息”的确认。你有一些为什么有非相对点的背景信息吗?
    • 欢呼@BrunoBieri,老实说,我对此没有任何看法。在我看来,基本方法只是职位(即,正如他们所拥有的那样)。如果他们添加了“相对于前一个添加的”便利功能,那真的只是一个额外的附加功能,你知道吗?因此,我想这只是他们“尚未解决的许多事情之一!”
    • 你好@BrunoBieri - 为了清楚起见,你对调用系列很熟悉:developer.apple.com/documentation/uikit/uibezierpath/… 还有 addCurve#to 等?
    • @BrunoBieri 还有一件事,我添加了一些惯用材料的真实示例,干杯
    • 感谢您的更新。看来我们必须对辅助方法做同样的事情。
    猜你喜欢
    • 2022-09-08
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多