gpt4 book ai didi

cocoa - NSSegmentedCell 子类绘图

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

我创建了 NSSegmentedCell 的子类并实现了drawWithFrame,如下所示:

#import "CustomSegmentedCell.h"

@implementation CustomSegmentedCell

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

int i=0, count=[self segmentCount];
NSRect segmentFrame=cellFrame;

for(i=0; i<count; i++) {
segmentFrame.size.width=[self widthForSegment:i];
[NSGraphicsContext saveGraphicsState];
// Make sure that segment drawing is not allowed to spill out into other segments
NSBezierPath* clipPath = [NSBezierPath bezierPathWithRect: segmentFrame];
[clipPath addClip];
[self drawSegment:i inFrame:segmentFrame withView:controlView];
[NSGraphicsContext restoreGraphicsState];
segmentFrame.origin.x+=segmentFrame.size.width;
}

_lastDrawRect=cellFrame;

}

@end

问题是分段在应用程序首次启动时没有绘制,只有当我用鼠标单击分段控件应该绘制的空白区域时,它才可见。请告诉我,我在这里缺少什么。

谢谢

最佳答案

子类化并实现drawSegment:inFrame:withView:

- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView
{
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame xRadius:8 yRadius:8];
[path setClip];
[path setLineWidth:2.5];
[[NSColor grayColor] setStroke];
NSColor* bgColr;
if (segment%2) {
bgColr = [NSColor blackColor];
}
else {
bgColr = [NSColor redColor];
}

[bgColr setFill];
[NSBezierPath fillRect:frame];

}

关于cocoa - NSSegmentedCell 子类绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12000720/

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