Какао: подклассы NSProgressIndicator на Lion

У меня есть проблема, которая сводит меня с ума. Я хочу подкласс NSProgressIndicator в форме "Бар", чтобы изменить цвет индикатора выполнения на основе нескольких логических состояний. Для этого я в основном переопределить -drawRect: по-прежнему. Однако очень странная вещь случается на льве. Даже если мой -drawRect просто вызывает реализацию суперкласса через [super drawRect:] и больше ничего не делает, весь индикатор выполнения будет отображаться в стиле, который использовался до Lion. Если вы помните, у Lion стиль индикатора прогресса изменился на более плоский и гладкий, чем у предыдущего стеклянного.

Опять же, просто переопределение -drawRect ничего не делать, кроме как вызывать реализацию суперкласса, меняет стиль индикатора выполнения на леопардовый. Кто-нибудь имеет хоть малейшее представление о том, что происходит и как я могу это исправить?

2 ответа

Как насчет создания слоя индикатора прогресса и применения фильтра Core Image, чтобы перекрасить его?

CustomeProgressIndicator.h:

#import <Cocoa/Cocoa.h>

@interface CustomProgressIndicator : NSView {

    double m_minValue;
    double m_maxValue;
    double m_value;
}

- (void)setMaxValue:(double)newMaxValue;
- (void)setMinValue:(double)newMinValue;
- (void)setDoubleValue:(double)newDoubleValue;
- (void)drawRect:(NSRect)dirtyRect;   
@end

CustomProgressIndicator.m:

#import "CustomProgressIndicator.h"

@implementation CustomProgressIndicator

- (void)setMaxValue:(double)newMaxValue
{
    m_maxValue = newMaxValue;
}

- (void)setMinValue:(double)newMinValue
{
    m_minValue = newMinValue;
}

- (void)setDoubleValue:(double)newDoubleValue
{
    m_value = newDoubleValue;
    [self setNeedsDisplay:YES];
}

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor grayColor] set];
    [NSBezierPath fillRect:dirtyRect];

    double width = ((m_value - m_minValue) / (m_maxValue - m_minValue));
    CGRect bar = dirtyRect;
    bar.size.width *= width;

    [[NSColor darkGrayColor] set];
    [NSBezierPath fillRect:bar];    
}
Другие вопросы по тегам