Какао: создание подклассов NSProgressIndicator на Lion - PullRequest
2 голосов
/ 11 октября 2011

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

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

Ответы [ 2 ]

1 голос
/ 26 сентября 2014

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];    
}
1 голос
/ 18 мая 2012

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

...