I've made a simple example that you can see below where I've used custom NSView that draws an Image and a Bezier Path with some text inside, and around the Bezier Path there's a Shadow.
...And this is the drawRect method source code of the custom NSView.
- (void)drawRect:(NSRect)frameRect {
[NSGraphicsContext saveGraphicsState];
[[NSColor colorWithCalibratedRed:0.64 green:0.66 blue:0.71 alpha:1.0] set];
NSRectFill(frameRect);
/* Draw Shadow */
NSShadow *shadow = [[NSShadow alloc] init];
[shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.5]];
[shadow setShadowOffset:NSMakeSize(4.0, -4.0)];
[shadow setShadowBlurRadius:3.0];
[shadow set];
/* Draw Control */
NSRect myRect = NSMakeRect(80, 50, frameRect.size.width - 120, 60);
NSBezierPath *path = [NSBezierPath bezierPath];
[path setLineJoinStyle:NSRoundLineJoinStyle];
[path appendBezierPathWithRoundedRect:myRect xRadius:8.0 yRadius:8.0];
[path moveToPoint:NSMakePoint(80, 75)];
[path lineToPoint:NSMakePoint(65, 85)];
[path lineToPoint:NSMakePoint(80, 95)];
NSColor *startingColor = [NSColor colorWithCalibratedRed:0.90
green:0.92 blue:0.85 alpha:1.0];
NSColor *endingColor = [NSColor colorWithCalibratedRed:0.81
green:0.83 blue:0.76 alpha:1.0];
NSGradient *gradient = [[[NSGradient alloc] initWithStartingColor:startingColor
endingColor:endingColor] autorelease];
[path fill];
[gradient drawInBezierPath:path angle:90];
[NSGraphicsContext restoreGraphicsState];
[shadow release];
NSImage *image = [NSImage imageNamed:NSImageNameUser];
[image drawInRect:NSMakeRect(15, 50, 50, 50) fromRect:NSZeroRect
operation:NSCompositeSourceOver fraction:1.0];
NSString *string = [NSString stringWithString:@"Text\nMore Text"];
[string drawInRect:NSMakeRect(90, 60, frameRect.size.width - 140, 45)
withAttributes:nil];
}

No comments:
Post a Comment