gpt4 book ai didi

cocoa - Matt Gemmell 的 NSBezierPath+StrokeExtensions 在剪辑矩形之外绘制

转载 作者:行者123 更新时间:2023-12-03 17:51:39 26 4
gpt4 key购买 nike

我正在使用 Matt Gemmell 的 NSBezierPath+StrokeExtensions 类别在 NSRect 上绘制内部笔划。这是整个类别的代码:

- (void)strokeInside
{
/* Stroke within path using no additional clipping rectangle. */
[self strokeInsideWithinRect:NSZeroRect];
}

- (void)strokeInsideWithinRect:(NSRect)clipRect
{
NSGraphicsContext *thisContext = [NSGraphicsContext currentContext];
float lineWidth = [self lineWidth];

/* Save the current graphics context. */
[thisContext saveGraphicsState];

/* Double the stroke width, since -stroke centers strokes on paths. */
[self setLineWidth:(lineWidth * 2.0)];

/* Clip drawing to this path; draw nothing outwith the path. */
[self setClip];

/* Further clip drawing to clipRect, usually the view's frame. */
if (clipRect.size.width > 0.0 && clipRect.size.height > 0.0) {
[NSBezierPath clipRect:clipRect];
}

/* Stroke the path. */
[self stroke];

/* Restore the previous graphics context. */
[thisContext restoreGraphicsState];
[self setLineWidth:lineWidth];
}

这是我的 drawRect: 方法:

- (void)drawRect:(NSRect)dirtyRect {
NSRect myRect = NSMakeRect(500, 0, 400, 100);
[[NSColor colorWithCalibratedRed:0 green:0 blue:1.0 alpha:0.5] set];
NSRectFillUsingOperation(myRect, NSCompositeSourceOver);

[[NSColor blueColor] set];
[[NSBezierPath bezierPathWithRect:myRect] strokeInside];
}

但是,当我向上滚动时会发生这种情况:

enter image description here

如您所见,内部笔画绘制到工具栏上。为什么会出现这种情况?如何修复 StrokeInside 方法?请注意,常规 中风 方法不会发生这种情况。

最佳答案

好吧,我明白了。而不是这一行:

[self setClip];

使用这个:

[self addClip];

工作正常并且有意义。

关于cocoa - Matt Gemmell 的 NSBezierPath+StrokeExtensions 在剪辑矩形之外绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946934/

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