Created
July 30, 2010 16:12
-
-
Save digerata/500793 to your computer and use it in GitHub Desktop.
Create a UILabel with a rounded rect background like in the iPhone Mail app. (Much faster than using UILabel.layer.cornerRadius)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// RoundedRectLabel.h | |
// | |
#import <UIKit/UIKit.h> | |
@interface CountLabel : UILabel { | |
NSInteger cornerRadius; | |
UIColor *rectColor; | |
} | |
@property (nonatomic) NSInteger cornerRadius; | |
@property (nonatomic, retain) UIColor *rectColor; | |
- (void) setBackgroundColor:(UIColor *)color; | |
- (void) drawRoundedRect:(CGContextRef)c rect:(CGRect)rect radius:(int)corner_radius color:(UIColor *)color; | |
@end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// RoundedRectLabel.m | |
// | |
#import "RoundedRectLabel.h" | |
#import <QuartzCore/QuartzCore.h> | |
@implementation CountLabel | |
@synthesize cornerRadius; | |
@synthesize rectColor; | |
- (void)dealloc { | |
[rectColor release]; | |
[super dealloc]; | |
} | |
- (id)initWithFrame:(CGRect)frame { | |
if ((self = [super initWithFrame:frame])) { | |
// Initialization code | |
} | |
return self; | |
} | |
- (void) setBackgroundColor:(UIColor *)color | |
{ | |
self.rectColor = color; | |
[super setBackgroundColor:[UIColor clearColor]]; | |
} | |
- (void)drawRect:(CGRect)rect { | |
CGContextRef context = UIGraphicsGetCurrentContext(); | |
if(cornerRadius == 0) | |
self.cornerRadius = 4; | |
[self drawRoundedRect:context rect:rect radius:cornerRadius color:rectColor]; | |
[super drawRect:rect]; | |
} | |
- (void) drawRoundedRect:(CGContextRef)c rect:(CGRect)rect radius:(int)corner_radius color:(UIColor *)color | |
{ | |
int x_left = rect.origin.x; | |
int x_left_center = rect.origin.x + corner_radius; | |
int x_right_center = rect.origin.x + rect.size.width - corner_radius; | |
int x_right = rect.origin.x + rect.size.width; | |
int y_top = rect.origin.y; | |
int y_top_center = rect.origin.y + corner_radius; | |
int y_bottom_center = rect.origin.y + rect.size.height - corner_radius; | |
int y_bottom = rect.origin.y + rect.size.height; | |
/* Begin! */ | |
CGContextBeginPath(c); | |
CGContextMoveToPoint(c, x_left, y_top_center); | |
/* First corner */ | |
CGContextAddArcToPoint(c, x_left, y_top, x_left_center, y_top, corner_radius); | |
CGContextAddLineToPoint(c, x_right_center, y_top); | |
/* Second corner */ | |
CGContextAddArcToPoint(c, x_right, y_top, x_right, y_top_center, corner_radius); | |
CGContextAddLineToPoint(c, x_right, y_bottom_center); | |
/* Third corner */ | |
CGContextAddArcToPoint(c, x_right, y_bottom, x_right_center, y_bottom, corner_radius); | |
CGContextAddLineToPoint(c, x_left_center, y_bottom); | |
/* Fourth corner */ | |
CGContextAddArcToPoint(c, x_left, y_bottom, x_left, y_bottom_center, corner_radius); | |
CGContextAddLineToPoint(c, x_left, y_top_center); | |
/* Done */ | |
CGContextClosePath(c); | |
CGContextSetFillColorWithColor(c, color.CGColor); | |
CGContextFillPath(c); | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Can you explain to me how to make a border