gpt4 book ai didi

cocoa - 凹 NSBezierPath

转载 作者:行者123 更新时间:2023-12-03 16:58:33 28 4
gpt4 key购买 nike

我有以下绘图代码:

[[NSColor redColor] set];
NSRect fillRect = NSMakeRect(bounds.size.width - 20.0f, 0.0f, 20.0f, 20.0f);
NSBezierPath *bezier1 = [NSBezierPath bezierPathWithRoundedRect:fillRect xRadius:10.0f yRadius:10.0f];

[bezier1 fill];

NSRect fill2 = fillRect;
fill2.origin.x += 5;
fill2.origin.y += 5;

fill2.size.width -= 10.0f;
fill2.size.height -= 10.0f;

NSBezierPath *bezier2 = [NSBezierPath bezierPathWithRoundedRect:fill2 xRadius:5.0f yRadius:5.0f];
[[NSColor greenColor] set];

[bezier2 fill];

结果如下:

Screenshot

如何使内部绿色圆圈透明?用透明颜色替换绿色 NSColor 不起作用,合乎逻辑;-)

有没有办法与 NSBezierPath 实例相交或用其他方法解决这个问题?

最佳答案

我认为您正在寻找的是环的贝塞尔曲线路径,您可以通过创建单个 NSBezierPath 并设置缠绕规则来实现: p>

[[NSColor redColor] set];
NSRect fillRect = NSMakeRect(bounds.size.width - 20.0f, 0.0f, 20.0f, 20.0f);
NSBezierPath *bezier1 = [NSBezierPath new];
[bezier1 setWindingRule:NSEvenOddWindingRule]; // set the winding rule for filling
[bezier1 appendBezierPathWithRoundedRect:fillRect xRadius:10.0f yRadius:10.0f];

NSRect innerRect = NSInsetRect(fillRect, 5, 5); // the bounding rect for the hole
[bezier1 appendBezierPathWithRoundedRect:innerRect xRadius:5.0f yRadius:5.0f];

[bezier1 fill];

NSEvenOddWindingRule 规则通过考虑从该点到整个路径边界之外的一条线来确定是否填充特定点;如果该线穿过偶数条路径,则不填充,否则填充。因此内圆中的任何点都不会被填充,而两点之间的点将被填充 - 结果是一个环。

关于cocoa - 凹 NSBezierPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073041/

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