2

我的应用程序中有一个 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];
    }
}
4

1 回答 1

4

第一步是创建一个绘制渐变的自定义 NSView 子类:

渐变背景视图.h:

@interface GradientBackgroundView : NSView
{}
@end

渐变背景视图.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 中,双击滚动视图,然后在 Identity 窗格中将 Class 设置为 GradientBackgroundView。

从这一点开始,事情几乎以标准方式处理。您可以将子视图添加到文档视图、调整其大小等。这是一个屏幕截图: 渐变背景

于 2011-05-13T17:04:48.843 回答