gpt4 book ai didi

ios - CGContext 与 CALayer

转载 作者:可可西里 更新时间:2023-11-01 05:41:45 26 4
gpt4 key购买 nike

我正在尝试掌握 Quartz 2D 并查看在线书籍 Quartz 2D Graphics for Mac OS X Developers .

让我感到困惑的一个非常基本的事情是 CGContext。例如,我可以使用下面的代码绘制一个简单的“U”形,并在 CAShapeLayer 中使用它,而无需引用 CGContextCAShapeLayer 默认隐含/提供上下文吗?

我可能在这里混淆了几个 iOS/OSX 图形 API,所以也许有人可以澄清我哪里出错了。

CGPoint pt1 =  CGPointMake(100, 100);
CGPoint pt2 = CGPointMake(150, 100);
CGPoint pt3 = CGPointMake(150, 200);
CGPoint pt4 = CGPointMake(190, 200);
CGPoint pt5 = CGPointMake(190, 100);
CGPoint pt6 = CGPointMake(210, 100);
CGPoint pt7 = CGPointMake(210, 250);
CGPoint pt8 = CGPointMake(100, 250);
CGPoint pt9 = CGPointMake(100, 100);

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, pt1.x,pt1.y);
CGPathAddLineToPoint(path, nil, pt2.x, pt2.y);
CGPathAddLineToPoint(path, nil, pt3.x, pt3.y);
CGPathAddLineToPoint(path, nil, pt4.x, pt4.y);
CGPathAddLineToPoint(path, nil, pt5.x, pt5.y);
CGPathAddLineToPoint(path, nil, pt6.x, pt6.y);
CGPathAddLineToPoint(path, nil, pt7.x, pt7.y);
CGPathAddLineToPoint(path, nil, pt8.x, pt8.y);
CGPathAddLineToPoint(path, nil, pt9.x, pt9.y);

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
[self.view.layer addSublayer:shapeLayer];

最佳答案

是的,CAShapeLayer 会为您将路径绘制到上下文中。

请注意,对于 CAShapeLayer,您使用 CGPath,而如果您自己绘制到上下文中,您可能希望使用 CGContext 自己的路径 -而是绘制函数。

最大的区别是 CGContext 路径函数直接将命令添加到上下文的当前路径中,当您告诉上下文填充或描边(或显式放弃)路径时将被丢弃,而 CGPath 对象将它们保留在周围一次又一次地重复使用——例如,如果您更改 CAShapeLayer 的绘图属性。

当然,即使您要将其绘制到上下文中,也有使用 CGPath 的情况。如果命令集从不改变,那么这是一个潜在的优化;它使转换路径变得容易;之后您可以迭代它的命令(例如,将它们导出到文件)。您还可以使用 UIBezierPath(即使用 Objective-C 消息)编写绘图代码,然后向其请求 CGPath。

以任何一种方式使用 CGContext 都没有错,并且可能在某些情况下它是最好的,但 CAShapeLayer 是大多数用途的最简单方法,特别是在 Cocoa Touch 中,每个 UIView 都由一个 CALayer 支持,您可以将将 CAShapeLayer 放入。

关于ios - CGContext 与 CALayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com