我有一个让我发疯的问题。我想在其“Bar”形式中继承NSProgressIndicator
,以根据几个逻辑状态更改进度条的颜色。为此,我基本上像往常一样覆盖-drawRect:
。然而Lion上发生了一件非常奇怪的事情。即使我的-drawRect
只是通过[super drawRect:]
调用超类的实现而没有做任何其他事情,整个进度条将使用在 Lion之前使用的样式显示。如果你还记得,对于Lion来说,进度条的风格可以从以前的玻璃条更改为更平整和光滑的外观。
同样,只是覆盖-drawRect
除了调用超类'实现之外什么也不做,只会将进度条的样式更改为Leopard。有没有人知道发生了什么以及如何解决这个问题?
答案 0 :(得分:1)
如何使进度指示器支持图层并应用Core Image过滤器来重新着色它?
答案 1 :(得分: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];
}