天天看點

UILabel  設定漸變顔色字型

GradientLabel.h

#import <UIKit/UIKit.h>

@interface GradientLabel : UIView

@property (nonatomic, strong) NSArray * colors;//字型漸變顔色數組(必須将顔色轉換為CGColor并強制轉換為id類型)

@property (nonatomic, strong) UIFont *font;//字型

@property (nonatomic, copy) NSString *text;//設定漸變顔色的文字

@property (nonatomic, assign) NSTextAlignment textAlignment;//對齊方式

@property (nonatomic, assign) CGPoint startPoint;//起始點(0.0~1.0)

@property (nonatomic, assign) CGPoint endPoint;//結束點(0.0~1.0)

//應用設定

- (void) setGradientLabel;

@end

GradientLabel.m

#import "GradientLabel.h"

@interface GradientLabel ()

@property (nonatomic, strong) UILabel *label;

@property (nonatomic, strong) CAGradientLayer *gradientLayer;

@end

@implementation GradientLabel

- (CAGradientLayer *)gradientLayer {

    if (!_gradientLayer) {

        _gradientLayer = [CAGradientLayer layer];

        _gradientLayer.startPoint = CGPointMake(0.0,1.0);

        _gradientLayer.endPoint = CGPointMake(1.0, 1.0);

        _gradientLayer.frame = self.label.frame;

        _gradientLayer.colors = self.colors?:@[[UIColor whiteColor], [UIColor blackColor]];

    }

    return _gradientLayer;

}

- (void) setGradientLabel {

    self.label = [[UILabel alloc] init];

    self.label.text = self.text?:@"漸變字型";

    [self.label setFont:self.font?:[UIFont systemFontOfSize:13]];

    [self.label setTextAlignment:self.textAlignment?:kCTLeftTextAlignment];

    [self addSubview:self.label];

}

-(void)layoutSubviews {

    [super layoutSubviews];

    [self.label setFrame:self.bounds];

// 添加漸變層到控制器的view圖層上

    [self.layer addSublayer:self.gradientLayer];

// mask層工作原理:按照透明度裁剪,隻保留非透明部分,文字就是非透明的,是以除了文字,其他都被裁剪掉,這樣就隻會顯示文字下面漸變層的内容,相當于留了文字的區域,讓漸變層去填充文字的顔色。

// 設定漸變層的裁剪層

    self.gradientLayer.mask = self.label.layer;

}

@end

代碼位址:https://github.com/15736882551/GCGradientLabel