我的应用程序中有一个nsscroll视图,我创建了一个nsscrollview的子类来添加一个nsgradient,但它不起作用这是我的实现文件中的代码:
#import "scrollview.h"
@implementation scrollview
@synthesize startingColor;
@synthesize endingColor;
@synthesize angle;
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
[self setStartingColor:[NSColor colorWithCalibratedRed:0.941 green:0.941 blue:0.941 alpha:1]];
[self setEndingColor:[NSColor colorWithCalibratedRed:0.6588 green:0.6588 blue:0.6588 alpha:1]];
[self setAngle:90];
}
return self;
}
- (void)drawRect:(NSRect)rect {
NSBezierPath* roundRectPath = [NSBezierPath bezierPathWithRoundedRect: [self bounds] xRadius:10 yRadius:10];
[roundRectPath addClip];
if (endingColor == nil || [startingColor isEqual:endingColor]) {
// Fill view with a standard background color
[startingColor set];
NSRectFill(rect);
}
else {
// Fill view with a top-down gradient
// from startingColor to endingColor
NSGradient* aGradient = [[NSGradient alloc]
initWithStartingColor:startingColor
endingColor:endingColor];
[aGradient drawInRect:[self bounds] angle:angle];
}
}
答案 0 :(得分:4)
第一步是创建一个绘制渐变的自定义NSView子类:
GradientBackgroundView.h:
@interface GradientBackgroundView : NSView
{}
@end
GradientBackgroundView.m:
#import "GradientBackgroundView.h"
@implementation GradientBackgroundView
- (void) drawRect:(NSRect)dirtyRect
{
NSGradient *gradient = [[[NSGradient alloc] initWithStartingColor:[NSColor redColor] endingColor:[NSColor greenColor]] autorelease];
[gradient drawInRect:[self bounds] angle:90];
}
@end
下一步是使滚动视图的文档视图成为此类的实例(而不是普通的NSView)。
在IB中,双击滚动视图,然后在“身份”窗格中将“类”设置为“GradientBackgroundView”。
从这一点开始,事情几乎以标准方式处理。您可以将子视图添加到文档视图,调整其大小等。这是一个屏幕截图: