Chciałbym mieć podklasę NSSegmentedControl, gdzie różne segmenty są różne kolory. Próbowałem instacji NSSegmentedControl i dodając następujący kod:NSSegmentedControl Kolory
- (void)drawRect:(NSRect)dirtyRect
{
NSColor *color = [NSColor redColor];
[color setFill];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
}
Wygląda blisko chyba że kolory 1. cała segmentacji kontrolować samego koloru czerwonego, w tym przypadku, i 2. Jest trochę koloru przelewa się na krawędziach.
Próbowałem też instacji NSSegmentedCell i dodając to:
- (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];
}
Jest lepiej, że różne segmenty są wyświetlane niepowtarzalne kolory, jednak ja raczej nie uznają to dopuszczalne. Chcę, aby cały segment został wypełniony odpowiednim kolorem dla tego segmentu i byłoby miło, gdyby miał gradient i cieniowanie, jak na pierwszym zrzucie ekranu.
Proszę dać mi znać, jak mogę to osiągnąć.
Dzięki.
jesteś szczęście, że obecna implementacja segmentowanego sterowania wykorzystuje przezroczystość w jego rysunku. Dzięki temu czerwone, które malujesz pod kontrolą, świecą. To może się zmienić przy każdej aktualizacji systemu Mac OS X. Aby to zrobić poprawnie, należy utworzyć własną podklasę NSView, która wykonuje cały rysunek w drawRect: zamiast próbować odcień istniejącego kontrolki. –
Och, Jon, prawdopodobnie związany z tym, co mówisz, jest w rzeczywistości około pół tuzina różnych stylów. Zastanawiam się, jak mogą wpływać na to inne style. –