iOS 自定义label

2018-04-23  本文已影响12人  George2016

上面是xib创建出来的,下面是纯代码创建的。

CULabel.h

@interface CULabel : UILabel
@property (nonatomic, assign) CGFloat radius;
@property (nonatomic, assign) CGFloat triangleHeight;
@property (nonatomic, assign) CGFloat triangleWidth;
@end

CULabel.mm

@interface CULabel()
@property (nonatomic, strong) CAShapeLayer *maskLayer;
@property (nonatomic, strong) UIBezierPath *borderPath;
@end

@implementation CULabel


- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

-(void)setup {
    self.maskLayer = [CAShapeLayer layer];
    [self.layer setMask:self.maskLayer];
    self.borderPath = [UIBezierPath bezierPath];
}

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
    [super drawRect:rect];
    
    CGFloat viewWidth = self.bounds.size.width;
    CGFloat viewHeigt = self.bounds.size.height;
    
    CGFloat radius = self.radius;
    CGFloat triangleWidth = self.triangleWidth;
    CGFloat triangleHeight = self.triangleHeight;
    
    [self.borderPath moveToPoint:CGPointMake(0, radius)];
    [self.borderPath addQuadCurveToPoint:CGPointMake(radius, 0) controlPoint:CGPointMake(0, 0)];
    [self.borderPath addLineToPoint:CGPointMake(viewWidth-radius, 0)];
    [self.borderPath addQuadCurveToPoint:CGPointMake(viewWidth, radius) controlPoint:CGPointMake(viewWidth, 0)];
    [self.borderPath addLineToPoint:CGPointMake(viewWidth, viewHeigt)];
    [self.borderPath addLineToPoint:CGPointMake(viewWidth/2.0+triangleWidth/2.0, viewHeigt)];
    [self.borderPath addLineToPoint:CGPointMake(viewWidth/2.0, viewHeigt-triangleHeight)];
    [self.borderPath addLineToPoint:CGPointMake(viewWidth/2.0-triangleWidth/2.0, viewHeigt)];
    [self.borderPath addLineToPoint:CGPointMake(0, viewHeigt)];
    [self.borderPath addLineToPoint:CGPointMake(0, radius)];
    
    self.maskLayer.path = self.borderPath.CGPath;
}


-(void)setRadius:(CGFloat)radius {
    _radius = radius;
    [self setNeedsDisplay];
}
-(void)setTriangleWidth:(CGFloat)triangleWidth {
    _triangleWidth = triangleWidth;
    [self setNeedsDisplay];
}
-(void)setTriangleHeight:(CGFloat)triangleHeight {
    _triangleHeight = triangleHeight;
    [self setNeedsDisplay];
}

@end

如何使用?

#import "CULabel.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet CULabel *clabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    CULabel *label = [[CULabel alloc] initWithFrame:CGRectMake(40, 100, 200, 40)];
    [self.view addSubview:label];
    label.backgroundColor = [UIColor purpleColor];
    label.text = @"卖家推荐 * 新品推荐";
    label.textColor = [UIColor whiteColor];
    label.textAlignment = NSTextAlignmentCenter;
    label.font = [UIFont fontWithName:@"" size:15];
    label.radius = 10;
    label.triangleWidth = 10.0;
    label.triangleHeight = 5.0;
    
    self.clabel.radius = 10;
    self.clabel.triangleWidth = 10.0;
    self.clabel.triangleHeight = 5.0;
}

@end
上一篇下一篇

猜你喜欢

热点阅读