TKRoundedView.h
typedef NS_OPTIONS(NSUInteger, TKRoundedCorner) {
TKRoundedCornerNone = 0,
TKRoundedCornerTopRight = 1 << 0,
TKRoundedCornerBottomRight = 1 << 1,
TKRoundedCornerBottomLeft = 1 << 2,
TKRoundedCornerTopLeft = 1 << 3,
};
typedef NS_OPTIONS(NSUInteger, TKDrawnBorderSides) {
TKDrawnBorderSidesNone = 0,
TKDrawnBorderSidesRight = 1 << 0,
TKDrawnBorderSidesLeft = 1 << 1,
TKDrawnBorderSidesTop = 1 << 2,
TKDrawnBorderSidesBottom = 1 << 3,
};
typedef NS_ENUM(NSInteger, TKGradientDirection) {
TKGradientDirectionHorizontal,
TKGradientDirectionVertical,
TKGradientDirectionUp,
TKGradientDirectionDown,
};
extern const TKRoundedCorner TKRoundedCornerAll;
extern const TKDrawnBorderSides TKDrawnBorderSidesAll;
UIImage * TKRoundedCornerImage(CGSize size,
TKRoundedCorner corners,
TKDrawnBorderSides drawnBorders,
UIColor *fillColor,
UIColor *borderColor,
CGFloat borderWidth,
CGFloat cornerRadius);
@interface TKRoundedView : UIView
/* Which borders should be drawn - default TKDrawnBordersSidesAll - only not rounded borders can *NOT* be drawn atm */
@property (nonatomic, assign) TKDrawnBorderSides drawnBordersSides;
/* Which corners should be rounded - default TKRoundedCornerAll */
@property (nonatomic, assign) TKRoundedCorner roundedCorners;
/* Fill color of the figure - default white */
@property (nonatomic, strong) UIColor *fillColor;
/* Stroke color for the figure, default is light gray */
@property (nonatomic, strong) UIColor *borderColor;
/* Border line width, default 1.0f */
@property (nonatomic, assign) CGFloat borderWidth;
/* Corners radius , default 15.0f */
@property (nonatomic, assign) CGFloat cornerRadius;
/* Direction of the gradient [options -, |, /, \] (if there will be a gradient drawn), default vertical */
@property (nonatomic, assign) TKGradientDirection gradientDirection;
/* NSArray of NSDictionaries with NSNumber with color's locations and the UIColor object, default nil */
@property (nonatomic, strong) NSArray *gradientColorsAndLocations;
@end
TKRoundedView.m
#import "TKRoundedView.h"
#import <QuartzCore/QuartzCore.h>
const TKRoundedCorner TKRoundedCornerAll = TKRoundedCornerTopRight | TKRoundedCornerBottomRight | TKRoundedCornerBottomLeft | TKRoundedCornerTopLeft;
const TKDrawnBorderSides TKDrawnBorderSidesAll = TKDrawnBorderSidesRight | TKDrawnBorderSidesLeft | TKDrawnBorderSidesTop | TKDrawnBorderSidesBottom;
UIImage * TKRoundedCornerImage(CGSize size,
TKRoundedCorner corners,
TKDrawnBorderSides drawnBorders,
UIColor *fillColor,
UIColor *borderColor,
CGFloat borderWidth,
CGFloat cornerRadius){
TKRoundedView *view = [[TKRoundedView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, size.width, size.height)];
view.roundedCorners = corners;
view.drawnBordersSides = drawnBorders;
view.fillColor = fillColor;
view.borderColor = borderColor;
view.borderWidth = borderWidth;
view.cornerRadius = cornerRadius;
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
view = nil;
return img;
}
@interface TKRoundedView (){
CGColorSpaceRef _colorSpace;
CGFloat* _locationsTable;
CFArrayRef _cfColors;
CGGradientRef _gradient;
NSArray *_observableKeys;
}
@end
@implementation TKRoundedView
#pragma mark - Initialization
- (void)dealloc{
[self.observableKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[self removeObserver:self forKeyPath:obj];
}];
if(_locationsTable != NULL)
free(_locationsTable);
if (_cfColors != NULL) {
CFRelease(_cfColors);
}
if (_colorSpace != NULL) {
CGColorSpaceRelease(_colorSpace);
}
if (_gradient != NULL) {
CGGradientRelease(_gradient);
}
}
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (!self)return nil;
[self commonInit];
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (!self)return nil;
[self commonInit];
return self;
}
- (void)commonInit{
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
self.contentMode = UIViewContentModeRedraw;
_gradientDirection = TKGradientDirectionVertical;
_fillColor = [UIColor whiteColor];
_borderColor = [UIColor lightGrayColor];
_cornerRadius = 15.0f;
_borderWidth = 1.0f;
_roundedCorners = TKRoundedCornerAll;
_drawnBordersSides = TKDrawnBorderSidesAll;
[self.observableKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[self addObserver:self forKeyPath:obj options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:nil];
}];
}
#pragma mark - Drawing
- (void)drawRect:(CGRect)rect{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat halfLineWidth = _borderWidth / 2.0f;
CGFloat topInsets = _drawnBordersSides & TKDrawnBorderSidesTop ? halfLineWidth : -halfLineWidth;
CGFloat leftInsets = _drawnBordersSides & TKDrawnBorderSidesLeft ? halfLineWidth : -halfLineWidth;
CGFloat rightInsets = _drawnBordersSides & TKDrawnBorderSidesRight ? halfLineWidth : -halfLineWidth;
CGFloat bottomInsets = _drawnBordersSides & TKDrawnBorderSidesBottom ? halfLineWidth : -halfLineWidth;
UIEdgeInsets insets = UIEdgeInsetsMake(topInsets, leftInsets, bottomInsets, rightInsets);
CGRect properRect = UIEdgeInsetsInsetRect(rect, insets);
/* Setup line width */
CGContextSetLineWidth(ctx, 0.0f);
// Add and fill rect
[self addPathToContext:ctx inRect:properRect respectDrawnBorder:NO];
// Close the path
CGContextClosePath(ctx);
if (_gradientColorsAndLocations.count) {
CGContextSaveGState(ctx);
CGContextClip(ctx);
[self drawGradientToContext:ctx inRect:rect];
CGContextRestoreGState(ctx);
}
else{
// Fill and Stroke path
CGContextSetFillColorWithColor(ctx, _fillColor.CGColor);
CGContextDrawPath(ctx, kCGPathFill);
}
/* Setup colors and line width */
CGContextSetStrokeColorWithColor(ctx, _borderColor.CGColor);
CGContextSetLineWidth(ctx, _borderWidth);
// Add and stroke rect
[self addPathToContext:ctx inRect:properRect respectDrawnBorder:YES];
// Fill and Stroke path
CGContextDrawPath(ctx, kCGPathStroke);
}
- (void)addPathToContext:(CGContextRef)ctx inRect:(CGRect)rect respectDrawnBorder:(BOOL)respectDrawnBorders{
CGFloat minx = CGRectGetMinX(rect);
CGFloat midx = CGRectGetMidX(rect);
CGFloat maxx = CGRectGetMaxX(rect);
CGFloat miny = CGRectGetMinY(rect);
CGFloat midy = CGRectGetMidY(rect);
CGFloat maxy = CGRectGetMaxY(rect);
CGContextMoveToPoint(ctx, minx, midy);
/* Top Left Corner */
if (_roundedCorners & TKRoundedCornerTopLeft && _drawnBordersSides & (TKDrawnBorderSidesTop | TKDrawnBorderSidesLeft)) {
CGContextAddArcToPoint(ctx, minx, miny, midx, miny, _cornerRadius);
CGContextAddLineToPoint(ctx, midx, miny);
}
else{
if (_drawnBordersSides & TKDrawnBorderSidesLeft || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, minx, miny);
}
else{
CGContextDrawPath(ctx, kCGPathStroke);
CGContextMoveToPoint(ctx, minx, miny);
}
if (_drawnBordersSides & TKDrawnBorderSidesTop || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, midx, miny);
}
else{
CGContextDrawPath(ctx, kCGPathStroke);
CGContextMoveToPoint(ctx, midx, miny);
}
}
/* Top Right Corner */
if (_roundedCorners & TKRoundedCornerTopRight && _drawnBordersSides & (TKDrawnBorderSidesTop | TKDrawnBorderSidesRight)) {
CGContextAddArcToPoint(ctx, maxx, miny, maxx, midy, _cornerRadius);
CGContextAddLineToPoint(ctx, maxx, midy);
}
else{
if (_drawnBordersSides & TKDrawnBorderSidesTop || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, maxx, miny);
}
else{
CGContextDrawPath(ctx, kCGPathStroke);
CGContextMoveToPoint(ctx, maxx, miny);
}
if (_drawnBordersSides & TKDrawnBorderSidesRight || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, maxx, midy);
}
else{
CGContextDrawPath(ctx, kCGPathStroke);
CGContextMoveToPoint(ctx, maxx, midy);
}
}
/* Bottom Right Corner */
if (_roundedCorners & TKRoundedCornerBottomRight && _drawnBordersSides & (TKDrawnBorderSidesBottom | TKDrawnBorderSidesRight)) {
CGContextAddArcToPoint(ctx, maxx, maxy, midx, maxy, _cornerRadius);
CGContextAddLineToPoint(ctx, midx, maxy);
}
else{
if (_drawnBordersSides & TKDrawnBorderSidesRight || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, maxx, maxy);
}
else{
CGContextDrawPath(ctx, kCGPathStroke);
CGContextMoveToPoint(ctx, maxx, maxy);
}
if (_drawnBordersSides & TKDrawnBorderSidesBottom || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, midx, maxy);
}
else{
CGContextDrawPath(ctx, kCGPathStroke);
CGContextMoveToPoint(ctx, midx, maxy);
}
}
/* Bottom Left Corner */
if (_roundedCorners & TKRoundedCornerBottomLeft && _drawnBordersSides & (TKDrawnBorderSidesBottom | TKDrawnBorderSidesLeft)) {
CGContextAddArcToPoint(ctx, minx, maxy, minx, midy, _cornerRadius);
CGContextAddLineToPoint(ctx, minx, midy);
}
else{
if (_drawnBordersSides & TKDrawnBorderSidesBottom || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, minx, maxy);
}
else{
CGContextDrawPath(ctx, kCGPathStroke);
CGContextMoveToPoint(ctx, minx, maxy);
}
if (_drawnBordersSides & TKDrawnBorderSidesLeft || !respectDrawnBorders){
CGContextAddLineToPoint(ctx, minx, midy);
}
else{
CGContextMoveToPoint(ctx, minx, midy);
CGContextDrawPath(ctx, kCGPathStroke);
}
}
}
- (void)drawGradientToContext:(CGContextRef)ctx inRect:(CGRect)rect{
if (_gradient == NULL) {
_gradient = CGGradientCreateWithColors(_colorSpace,_cfColors, _locationsTable);
}
CGPoint startPoint = CGPointZero;
CGPoint endPoint = CGPointZero;
switch (_gradientDirection) {
case TKGradientDirectionVertical:
startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
break;
case TKGradientDirectionHorizontal:
startPoint = CGPointMake(CGRectGetMinX(rect), CGRectGetMidY(rect));
endPoint = CGPointMake(CGRectGetMaxX(rect), CGRectGetMidY(rect));
break;
case TKGradientDirectionDown:
startPoint = CGPointMake(CGRectGetMinX(rect), CGRectGetMinY(rect));
endPoint = CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect));
break;
case TKGradientDirectionUp:
startPoint = CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect));
endPoint = CGPointMake(CGRectGetMinX(rect), CGRectGetMinY(rect));
break;
default:
break;
}
CGContextSaveGState(ctx);
CGContextAddRect(ctx, rect);
CGContextClip(ctx);
CGContextDrawLinearGradient(ctx, _gradient, startPoint, endPoint, 0);
CGContextRestoreGState(ctx);
}
//#pragma mark - Setters
//
//- (void)setDrawnBordersSides:(TKDrawnBorderSides)drawnBordersSides{
// _drawnBordersSides = drawnBordersSides;
// [self setNeedsDisplay];
//}
//
//- (void)setRoundedCorners:(TKRoundedCorner)roundedCorners{
// _roundedCorners = roundedCorners;
// [self setNeedsDisplay];
//}
//
//- (void)setBorderColor:(UIColor *)borderColor{
// if (_borderColor != borderColor) {
// _borderColor = borderColor;
// [self setNeedsDisplay];
// }
//}
//
//- (void)setFillColor:(UIColor *)fillColor{
// if (_fillColor != fillColor) {
// _fillColor = fillColor;
// [self setNeedsDisplay];
// }
//}
//
//- (void)setGradientColorsAndLocations:(NSArray *)gradientColorsAndLocations{
// if (_gradientColorsAndLocations != gradientColorsAndLocations) {
// _gradientColorsAndLocations = gradientColorsAndLocations;
// [self prepareGradient];
// [self setNeedsDisplay];
// }
//}
//
//- (void)setGradientDirection:(TKGradientDirection)gradientDirection{
// if (_gradientDirection != gradientDirection) {
// _gradientDirection = gradientDirection;
// [self setNeedsDisplay];
// }
//}
//
//- (void)setBorderWidth:(CGFloat)borderWidth{
// _borderWidth = borderWidth;
// [self setNeedsDisplay];
//}
//
//- (void)setCornerRadius:(CGFloat)cornerRadius{
// _cornerRadius = cornerRadius;
// [self setNeedsDisplay];
//}
#pragma mark - Key-Value Observing
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key{
return YES;
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"gradientColorsAndLocations"])
{
[self prepareGradient];
[self setNeedsDisplay];
return ;
}
[self.observableKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
if ([keyPath isEqualToString:obj])
{
[self setNeedsDisplay];
return;
}
}];
}
- (void)didChange:(NSKeyValueChange)changeKind valuesAtIndexes:(NSIndexSet *)indexes forKey:(NSString *)key{
if ([key isEqualToString:@"gradientColorsAndLocations"])
{
[self prepareGradient];
[self setNeedsDisplay];
}
}
- (NSArray *)observableKeys{
if (!_observableKeys) {
_observableKeys = (@[
@"drawnBordersSides",
@"roundedCorners",
@"fillColor",
@"borderColor",
@"borderWidth",
@"cornerRadius",
@"gradientDirection",
@"gradientColorsAndLocations"
]);
}
return _observableKeys;
}
#pragma mark - Private
- (void)prepareGradient{
NSMutableArray *colors = [NSMutableArray arrayWithCapacity:_gradientColorsAndLocations.count];
NSMutableArray *locations = [NSMutableArray arrayWithCapacity:_gradientColorsAndLocations.count];
for (NSDictionary *dictionary in self.gradientColorsAndLocations) {
if ([dictionary isKindOfClass:[NSDictionary class]]) {
for (NSString *key in dictionary) {
id object = dictionary[key];
if ([object isKindOfClass:[NSNumber class]]) {
[locations addObject:object];
}
else if ([object isKindOfClass:[UIColor class]]){
[colors addObject:object];
}
}
}
}
if (colors.count == locations.count) {
if (_colorSpace == NULL) {
_colorSpace = CGColorSpaceCreateDeviceRGB();
}
NSInteger count = locations.count;
if (_locationsTable != NULL) {
free(_locationsTable);
}
_locationsTable = malloc((size_t) sizeof(CGFloat) * count);
CFMutableArrayRef cfColorsMutable = CFArrayCreateMutable(kCFAllocatorDefault, count, &kCFTypeArrayCallBacks);
for(int i = 0; i < count; i++){
NSNumber *locationNumber = locations[i];
_locationsTable[i] = [locationNumber floatValue];
CGColorRef color = [colors[i] CGColor];
CFArrayAppendValue(cfColorsMutable, color);
}
if (_cfColors != NULL) {
CFRelease(_cfColors);
}
_cfColors = CFArrayCreateCopy(kCFAllocatorDefault, cfColorsMutable);
CFRelease(cfColorsMutable);
if (_gradient != NULL) {
CGGradientRelease(_gradient);
_gradient = NULL;
}
}
}
@end
使用
#import "TKViewController.h"
#import "TKRoundedView.h"
@interface TKViewController ()
@property (nonatomic, strong) UISwitch *aSwitch;
@property (nonatomic, strong) UILabel *label;
@end
@implementation TKViewController
- (id)init{
self = [super initWithNibName:nil bundle:nil];
if(!self)return nil;
return self;
}
- (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.aSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(self.view.frame.size.width - 90 , self.view.frame.size.height - 34, 88, 44)];
[self.view addSubview:_aSwitch];
[_aSwitch addTarget:self action:@selector(switchSwitched:) forControlEvents:UIControlEventValueChanged];
_aSwitch.on = NO;
[self switchSwitched:_aSwitch];
self.label = [[UILabel alloc] initWithFrame:CGRectMake(10, self.view.frame.size.height - 34, self.view.frame.size.width - 105 , _aSwitch.frame.size.height)];
_label.text = @"borders on/off";
_label.textAlignment = NSTextAlignmentCenter;
_label.textColor = [UIColor blackColor];
[self.view addSubview:_label];
TKRoundedView *roundedView = [[TKRoundedView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
roundedView.roundedCorners = TKRoundedCornerBottomLeft;
roundedView.borderColor = [UIColor redColor];
roundedView.fillColor = [UIColor yellowColor];
roundedView.borderWidth = 5.0f;
roundedView.cornerRadius = 20;
[self.view addSubview:roundedView];
}
- (void)switchSwitched:(UISwitch *)theSwitch{
[self showCornersOrBorders:theSwitch.on];
}
- (void)didReceiveMemoryWarning{
[super didReceiveMemoryWarning];
}
- (void)showCornersOrBorders:(BOOL)corners{
for (UIView *subview in self.view.subviews) {
if (subview != _aSwitch && subview != _label) {
[subview removeFromSuperview];
}
}
NSString *colorKey = @"color";
NSString *locationKey = @"location";
TKGradientDirection gradientDirection = TKGradientDirectionDown;
CGFloat offset = 10.0f;
CGFloat side = (self.view.frame.size.width - 4 * offset)/ 3.0f ;
CGRect frame = CGRectMake(offset, offset, side, side);
if (corners) {
TKRoundedCorner cornerOptions[13] = {
TKRoundedCornerNone,
TKRoundedCornerAll,
TKRoundedCornerTopLeft,
TKRoundedCornerTopRight,
TKRoundedCornerBottomRight,
TKRoundedCornerBottomLeft,
TKRoundedCornerTopLeft | TKRoundedCornerTopRight,
TKRoundedCornerBottomLeft | TKRoundedCornerBottomRight,
TKRoundedCornerTopLeft | TKRoundedCornerBottomRight,
TKRoundedCornerBottomLeft | TKRoundedCornerTopRight,
TKRoundedCornerTopLeft | TKRoundedCornerTopRight,
TKRoundedCornerTopLeft | TKRoundedCornerTopRight | TKRoundedCornerBottomRight,
TKRoundedCornerTopLeft | TKRoundedCornerTopRight | TKRoundedCornerBottomLeft,
};
NSArray *gradientColorsAndLocations = (@[
@{colorKey: [UIColor blackColor],locationKey: @(0.0f)},
@{colorKey: [UIColor lightGrayColor] ,locationKey: @(0.5f)},
@{colorKey: [UIColor whiteColor],locationKey: @(1.0f)}
]);
for (int i = 0; i < 13; i++) {
TKRoundedView *view1 = [[TKRoundedView alloc] initWithFrame:CGRectInset(frame, 10, 10)];
view1.roundedCorners = cornerOptions[i];
view1.borderColor = [UIColor colorWithRed:0.123 green:0.435 blue:0.52 alpha:1.0];
view1.fillColor = [UIColor colorWithWhite:0.6 alpha:0.1];
view1.borderWidth = 5.0f;
view1.gradientColorsAndLocations = gradientColorsAndLocations;
view1.gradientDirection = gradientDirection;
view1.cornerRadius = side/4;
[self.view addSubview:view1];
frame.origin.y += side + offset;
if (self.view.frame.size.height < CGRectGetMaxY(frame)) {
frame.origin.y = offset;
frame.origin.x += offset + side;
}
}
}
else{
NSArray *gradientColorsAndLocations = (@[
@{colorKey: [UIColor colorWithRed:0.0f green:137.0f/255.0f blue:248.0f/255.0f alpha:1.0f],locationKey: @(0.0f)},
@{colorKey: [UIColor colorWithRed:0.0f green:89.0f/255.0f blue:234.0f/255.0f alpha:1.0f],locationKey: @(1.0f)}
]);
for (int i = 0; i < 10; i++) {
TKRoundedView *view1 = [[TKRoundedView alloc] initWithFrame:frame];
if (i == 0) {
view1.roundedCorners = TKRoundedCornerTopLeft | TKRoundedCornerTopRight;
view1.drawnBordersSides = TKDrawnBorderSidesLeft | TKDrawnBorderSidesTop | TKDrawnBorderSidesRight;
}
else if(i == 1){
view1.roundedCorners = TKRoundedCornerBottomLeft | TKRoundedCornerBottomRight;
view1.drawnBordersSides = TKDrawnBorderSidesLeft | TKDrawnBorderSidesBottom | TKDrawnBorderSidesRight;
}
else if(i == 2){
view1.roundedCorners = TKRoundedCornerNone;
view1.drawnBordersSides = TKDrawnBorderSidesLeft | TKDrawnBorderSidesRight;
}
else if(i == 3){
view1.roundedCorners = TKRoundedCornerAll;
view1.drawnBordersSides = TKDrawnBorderSidesAll;
}
else if(i == 4){
view1.roundedCorners = TKRoundedCornerBottomLeft | TKRoundedCornerTopLeft;
view1.drawnBordersSides = TKDrawnBorderSidesLeft | TKDrawnBorderSidesBottom | TKDrawnBorderSidesTop;
}
else if(i == 5){
view1.roundedCorners = TKRoundedCornerBottomRight | TKRoundedCornerTopRight;
view1.drawnBordersSides = TKDrawnBorderSidesRight | TKDrawnBorderSidesBottom | TKDrawnBorderSidesTop;
}
else if(i == 6){
view1.roundedCorners = TKRoundedCornerNone;
view1.drawnBordersSides = TKDrawnBorderSidesTop| TKDrawnBorderSidesBottom;
}
else if(i == 7){
view1.roundedCorners = TKRoundedCornerNone;
view1.drawnBordersSides = TKDrawnBorderSidesAll;
}
else if(i == 8){
view1.roundedCorners = TKRoundedCornerBottomRight;
view1.drawnBordersSides = TKDrawnBorderSidesRight | TKDrawnBorderSidesBottom;
}
else if(i == 9){
view1.roundedCorners = TKRoundedCornerTopLeft;
view1.drawnBordersSides = TKDrawnBorderSidesLeft | TKDrawnBorderSidesTop;
}
view1.borderColor = [UIColor colorWithRed:1.000 green:0.899 blue:0.520 alpha:1.000];
view1.fillColor = [UIColor redColor];
view1.gradientColorsAndLocations = gradientColorsAndLocations;
view1.borderWidth = 5.0f;
view1.cornerRadius = 30.0f;
[self.view addSubview:view1];
frame.origin.y += offset + side;
if (self.view.frame.size.height < CGRectGetMaxY(frame)) {
frame.origin.y = offset;
frame.origin.x += offset + side;
}
}
}
[self.view bringSubviewToFront:_aSwitch];
}
@end
网友评论