2

我有一个让我发疯的问题。我想NSProgressIndicator以其“条形”形式进行子类化,以根据几个逻辑状态更改进度条的颜色。为此,我基本上-drawRect:像往常一样覆盖。然而,狮子身上发生了一件非常奇怪的事情。即使我-drawRect只是通过调用超类的实现[super drawRect:]并且根本不做任何其他事情,整个进度条也将使用Lion之前使用的样式显示。如果您还记得的话,使用 Lion 时,进度条样式已从之前的玻璃样式变为更平坦、更时尚的外观。

再一次,只是重写-drawRect调用超类的实现将进度条的样式更改为 Leopard 的样式。有没有人知道发生了什么以及我该如何解决这个问题?

4

2 回答 2

1

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];    
}
于 2014-09-25T23:32:11.270 回答
1

如何让进度指示器层支持并应用核心图像过滤器来重新着色?

于 2012-05-17T20:38:23.690 回答