- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试掌握 Quartz 2D 并查看在线书籍 Quartz 2D Graphics for Mac OS X Developers .
让我感到困惑的一个非常基本的事情是 CGContext。例如,我可以使用下面的代码绘制一个简单的“U”形,并在 CAShapeLayer
中使用它,而无需引用 CGContext
。 CAShapeLayer
默认隐含/提供上下文吗?
我可能在这里混淆了几个 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/
我在为 MKMapOverlayView 创建的 CGContext 中执行一些 CG 绘图操作。在我的上下文中绘制之后,我创建了一个图像并将其粘贴到 MapKit 提供的上下文中。 - (void)
我有一个 CGBitmapContext (bitmapContext),我想将它的一些矩形部分 (rect) 绘制到当前 CGContext (context) >). 现在我就是这样做的: CGC
各位,这是我的代码: - (void) renderPageAtIndex:(NSUInteger)index inContext:(CGContextRef)ctx { //backgrou
我正在使用代码在 CGContext 上显示 pdf 页面 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {
在我的 iPhone 项目中,我有一个 UIView,我在其中实现了 drawRect 方法: - (void)drawRect:(CGRect)rect { CGContextRef con
我正在尝试在 UIView draw(_:) 中创建自己的 CGContext。这里: override func draw(_ rect: CGRect) { //let c
我正在UIView drawRect函数中绘制一个形状,该形状涉及剪切路径,然后在后面添加彩色块,以便颜色具有剪切路径的形状。但是,由于某些原因,路径的线条无法顺利伸出;如果抗锯齿功能无法正常使用,
我正在使用以下代码缩小UIImage: let image = UIImage(contentsOfFile: imageUrl.path!)!.CGImage let
我正在尝试使用 Core Graphics 从另一个线程在自定义 UIView 中进行无限绘图。无法获取当前的 CGContext,因此我尝试创建一个新的。但我不知道如何将其应用到 View 中。 这
在测试我的应用程序是否存在任何错误时,我注意到在模拟器中,当我调用其中一个函数将图像设置为 UIImageView 时,会抛出一堆 CGContext 错误,并且图像永远不会被设置。然而,在我的设备上
我有一个 UIView,它有 3 个自定义 subview ,其类(目前)称为 LVStemp 并表示树中的节点。 LVStemp 的框架比节点本身大,因为它还包含一些位于节点外部的绘图(尚未编码)。
据我所知,您可以使用两种方法在 CGContext 中绘制渐变,即 drawLinearGradient 和 drawRadialGradient。我正在寻找一种定义椭圆渐变的方法,我可以在其中定义
我正在尝试初始化 CGContext ( API ) let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirector
问题:如何在 CGContext 下显示背景图片? 我使用 Storyboard创建了一个 View Controller ,并放置了一个带有全屏背景图像的 View 。然后,使用相同的 View C
我正在尝试绘制以相等角度分隔的矩形。为此,我首先绘制一个 CGPath,然后对上下文应用转换。我连续做了5次。这是我的代码和输出。如您所见,屏幕截图中的输出不正确,矩形倾斜,不知道为什么。需要知道我做
我正在用 CGContext 渲染一个 NSAttributedString,但是当它渲染文本时是颠倒的 :( 这是我想出的: override func draw(with box: PDFDisp
我编写了一个渲染函数,每 1/60 秒调用一次。如下所示。本质上,它以使用正弦的放射状图案呈现 40 条线。看起来像这样http://imgur.com/a/kPKtT .当我在我的 iPhone 6
我有这段代码可以呈现一个内部带有动态文本的自定义滑动条 handle 。问题是我无法将其缩放到视网膜分辨率。它可以在所有设备上正确绘制并且大小合适,但在视网膜上分辨率较低。如何更改此代码以使最终图像分
当具有不同颜色的路径使用 CGContext 绘制在先前路径的顶部时,如何删除路径? 最佳答案 CGContextBeginPath() 在创建新路径的过程中总是丢弃之前的路径。 关于ios - CG
伙计们! 我需要绘制一些图像到 CGContext。这是相关代码: CGContextSaveGState(UIGraphicsGetCurrentContext()); CGContextRef c
我是一名优秀的程序员,十分优秀!