美文网首页程序猿阵线联盟-汇总各类技术干货
Mac 开发之获取 NSBezierPath 的 CGPath

Mac 开发之获取 NSBezierPath 的 CGPath

作者: 隐身人 | 来源:发表于2018-08-23 10:51 被阅读10046次

比如在 CGContextAddPath(ctx, 需要用到path.CGPath);
然而 在 NSBezierPath 中并没有 path.CGPath

修改为:

CGContextAddPath(ctx, [self CGPathFromPath:path]);

转换方法:CGPathFromPath 如下

- (CGMutablePathRef)CGPathFromPath:(NSBezierPath *)path
{
    CGMutablePathRef cgPath = CGPathCreateMutable();
    NSInteger n = [path elementCount];
    
    for (NSInteger i = 0; i < n; i++) {
        NSPoint ps[3];
        switch ([path elementAtIndex:i associatedPoints:ps]) {
            case NSMoveToBezierPathElement: {
                CGPathMoveToPoint(cgPath, NULL, ps[0].x, ps[0].y);
                break;
            }
            case NSLineToBezierPathElement: {
                CGPathAddLineToPoint(cgPath, NULL, ps[0].x, ps[0].y);
                break;
            }
            case NSCurveToBezierPathElement: {
                CGPathAddCurveToPoint(cgPath, NULL, ps[0].x, ps[0].y, ps[1].x, ps[1].y, ps[2].x, ps[2].y);
                break;
            }
            case NSClosePathBezierPathElement: {
                CGPathCloseSubpath(cgPath);
                break;
            }
            default: NSAssert(0, @"Invalid NSBezierPathElement");
        }
    }
    return cgPath;
}

最后笔者换了实现方法 ,此方法未验证,不过该方法得来不易,特此记录。

相关文章

网友评论

  • 練心:还是看不懂啊,板凳一个。
    隐身人::stuck_out_tongue: 哈哈哈 这是我工作之余 代码记录~
  • 假小宅:呀呵,发文了呀
    隐身人::sob: 咳咳咳咳 尴尬了 哈哈哈 没东西写了 然后前阵子住院一周。。。

本文标题:Mac 开发之获取 NSBezierPath 的 CGPath

本文链接:https://www.haomeiwen.com/subject/olspiftx.html