Я хотел бы иметь подкласс NSSegmentedControl, где различные сегменты имеют разные цвета. Я попытался подклассов NSSegmentedControl и добавить следующий код:Цвета NSSegmentedControl
- (void)drawRect:(NSRect)dirtyRect
{
NSColor *color = [NSColor redColor];
[color setFill];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
}
Это выглядит близко, за исключением того, что 1. окрашивает весь сегментированных контролировать тот же цвет, красный в этом случае, и 2. Есть немного красящего цвета по краям.
Я также попытался подклассов NSSegmentedCell и добавив следующее:
- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView
{
NSColor *color;
switch (segment) {
case 0:
color = [NSColor redColor];
break;
case 1:
color = [NSColor blueColor];
break;
case 2:
color = [NSColor greenColor];
break;
case 3:
color = [NSColor orangeColor];
break;
default:
break;
}
[color setFill];
NSRectFill(frame);
[super drawSegment:segment inFrame:frame withView:controlView];
}
Это лучше в том, что различные сегменты отображения уникальных цветов, но я бы вряд ли считать это приемлемым. Я хочу, чтобы весь сегмент был заполнен соответствующим цветом для этого сегмента, и было бы неплохо, если бы у него был градиент и затенение, как на первом снимке экрана.
Пожалуйста, дайте мне знать, как я могу это достичь.
Спасибо.
Ты что в текущей реализации сегментированного управления используется прозрачность в его чертеже. Это позволяет красному, что вы рисуете под контролем, чтобы сиять. Это может измениться при любом обновлении до Mac OS X. Чтобы сделать это правильно, вы должны сделать свой собственный подкласс NSView, который выполняет весь чертеж в drawRect: вместо того, чтобы подкрашивать существующий элемент управления. –
О, Джон, возможно, связанный с тем, что вы говорите, на самом деле около полудюжины разных стилей. Интересно, как другие стили могут также повлиять на это. –