NSScrollview с NSGradient - PullRequest
       71

NSScrollview с NSGradient

2 голосов
/ 05 мая 2011

У меня есть представление 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];
    }
}

1 Ответ

4 голосов
/ 13 мая 2011

Первый шаг - создать собственный подкласс 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 дважды щелкните вид прокрутки и на панели Identity установите для класса значение GradientBackgroundView.

С этого момента все обрабатывается в значительной степени стандартным способом. Вы можете добавить подпредставления к представлению документа, изменить его размер и т. Д. Вот скриншот: Gradient background

...