gpt4 book ai didi

iphone - 使用 Quartz 2D/Core Graphics 完成此绘图的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 21:00:29 28 4
gpt4 key购买 nike

作为我的应用程序中 View 之一的背景,我想在其框架内绘制一个相当简单的矩形边框。这本质上是一个矩形渐变:框架周围的黑线,大约 10-20 像素处渐变为白色。不幸的是,据我所知,Core Graphics 不提供矩形渐变(无论是 CGGradient 还是 CGShading )。所以我想知道最好的方法是什么。

我想到的两个:

  1. 绘制一系列同心矩形,每个后续矩形的颜色较浅,并在每边插入 1 像素。我想不出更简单的方法,但我必须自己完成所有梯度计算,并且可能需要大量图形操作。
  2. 在线性模式下使用 CGGradient,每侧一次。但为了实现这一点,我想我需要首先为每一侧设置一个梯形剪切区域,以便渐变在拐角处斜接。

似乎应该有一种方法可以使用路径描边来做到这一点,但似乎没有一种方法可以定义两侧方向不同的模式。

最佳答案

我会选择选项#2:

Use CGGradient in linear mode, once for each side. But for this to work, I think I'd need to set up a trapezoidal clipping area for each side first, so that the gradients would be mitered at the corners.

使用 NSBezierPath 创建梯形区域相当简单,您只需执行四次绘制操作。

以下是创建左侧梯形区域的基本代码:

NSRect outer = [self bounds];
NSPoint outerPoint[4];
outerPoint[0] = NSMakePoint(0, 0);
outerPoint[1] = NSMakePoint(0, outer.size.height);
outerPoint[2] = NSMakePoint(outer.size.width, outer.size.height);
outerPoint[3] = NSMakePoint(outer.size.width, 0);

NSRect inner = NSInsetRect([self bounds], borderSize, borderSize);
NSPoint innerPoint[4];
innerPoint[0] = inner.origin;
innerPoint[1] = NSMakePoint(inner.origin.x,
inner.origin.y + inner.size.height);
innerPoint[2] = NSMakePoint(inner.origin.x + inner.size.width,
inner.origin.y + inner.size.height);
innerPoint[3] = NSMakePoint(inner.origin.x + inner.size.width,
inner.origin.y);

NSBezierPath leftSidePath = [[NSBezierPath bezierPath] retain];
[leftSidePath moveToPoint:outerPoint[0]];
[leftSidePath lineToPoint:outerPoint[1]];
[leftSidePath lineToPoint:innerPoint[1]];
[leftSidePath lineToPoint:innerPoint[0]];
[leftSidePath lineToPoint:outerPoint[0]];

// ... etc.

[leftSidePath release];

关于iphone - 使用 Quartz 2D/Core Graphics 完成此绘图的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777595/

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