博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[控件] ChangeColorLabel
阅读量:5092 次
发布时间:2019-06-13

本文共 9895 字,大约阅读时间需要 32 分钟。

ChangeColorLabel

 

效果

 

源码

////  ChangeColorLabel.h//  YXMWeather////  Created by XianMingYou on 15/6/22.//  Copyright (c) 2015年 XianMingYou. All rights reserved.//#import 
@interface ChangeColorLabel : UIView@property (nonatomic, strong) UIFont *font;@property (nonatomic, strong) UIColor *textColor;@property (nonatomic, strong) UIColor *changedColor;/** * 文本 */@property (nonatomic, strong) NSString *text;/** * 设定文本后将会重新更新控件 */- (void)updateLabelView;/** * 颜色百分比 * * @param percent 颜色的百分比 */- (void)colorPercent:(CGFloat)percent;@end
////  ChangeColorLabel.m//  YXMWeather////  Created by XianMingYou on 15/6/22.//  Copyright (c) 2015年 XianMingYou. All rights reserved.//#import "ChangeColorLabel.h"#import "AlphaView.h"#import "UIView+SetRect.h"@interface ChangeColorLabel ()@property (nonatomic, strong) UILabel   *showLabel;@property (nonatomic, strong) UILabel   *alphaLabel;@property (nonatomic, strong) AlphaView *alphaView;@end@implementation ChangeColorLabel- (instancetype)initWithFrame:(CGRect)frame {    self = [super initWithFrame:frame];    if (self) {        [self initLabels];    }    return self;}- (void)initLabels {    self.showLabel = [[UILabel alloc] initWithFrame:CGRectZero];    [self addSubview:self.showLabel];        self.alphaLabel = [[UILabel alloc] initWithFrame:CGRectZero];    [self addSubview:self.alphaLabel];        // 设定alphaView    self.alphaView = [[AlphaView alloc] initWithFrame:CGRectZero];    self.alphaView.colors     = @[[UIColor clearColor],                                  [UIColor blackColor],                                  [UIColor blackColor],                                  [UIColor clearColor]];    self.alphaView.locations  = @[@(0.f), @(0.05), @(0.95), @(1.f)];    self.alphaView.startPoint = CGPointMake(0, 0);    self.alphaView.endPoint   = CGPointMake(1, 0);    self.alphaLabel.maskView = self.alphaView;}/** *  设定文本后将会重新更新控件 */- (void)updateLabelView {    // 字体    UIFont  *font      = (self.font == nil ? self.showLabel.font : self.font);        // 设置文本 + 设置颜色 + 设置字体    self.showLabel.text  = self.text;    self.alphaLabel.text = self.text;    self.showLabel.textColor  = self.textColor;    self.alphaLabel.textColor = self.changedColor;    self.showLabel.font  = font;    self.alphaLabel.font = font;        // 重置文本位置    [self.showLabel sizeToFit];    [self.alphaLabel sizeToFit];        // 重新设置alphaView的frame值    self.alphaView.width  = self.showLabel.width;    self.alphaView.height = self.showLabel.height;}/** *  文本颜色百分比 * *  @param percent 百分比 */- (void)colorPercent:(CGFloat)percent {    if (percent <= 0) {        self.alphaView.x = -self.showLabel.width;    } else {        self.alphaView.x = -self.showLabel.width + percent * self.showLabel.width;    }}#pragma mark - 私有方法@end
////  AlphaView.h//  YXMWeather////  Created by XianMingYou on 15/6/20.//  Copyright (c) 2015年 XianMingYou. All rights reserved.//#import 
@interface AlphaView : UIView@property (nonatomic, strong) NSArray *colors;@property (nonatomic, strong) NSArray *locations;@property (nonatomic) CGPoint startPoint;@property (nonatomic) CGPoint endPoint;- (void)alphaType;@end
////  AlphaView.m//  YXMWeather////  Created by XianMingYou on 15/6/20.//  Copyright (c) 2015年 XianMingYou. All rights reserved.//#import "AlphaView.h"@interface AlphaView (){    CAGradientLayer   *_gradientLayer;}@end@implementation AlphaView/** *  修改当前view的backupLayer为CAGradientLayer * *  @return CAGradientLayer类名字 */+ (Class)layerClass {    return [CAGradientLayer class];}- (instancetype)initWithFrame:(CGRect)frame {    self = [super initWithFrame:frame];    if (self) {        _gradientLayer = (CAGradientLayer *)self.layer;    }    return self;}- (void)alphaType {    self.colors     = @[[UIColor clearColor], [UIColor blackColor], [UIColor clearColor]];    self.locations  = @[@(0.25), @(0.5), @(0.75)];    self.startPoint = CGPointMake(0, 0);    self.endPoint   = CGPointMake(1, 0);}/** *  重写setter,getter方法 */@synthesize colors = _colors;- (void)setColors:(NSArray *)colors {    _colors = colors;        // 将color转换成CGColor    NSMutableArray *cgColors = [NSMutableArray array];    for (UIColor *tmp in colors) {        id cgColor = (__bridge id)tmp.CGColor;        [cgColors addObject:cgColor];    }        // 设置Colors    _gradientLayer.colors = cgColors;}- (NSArray *)colors {    return _colors;}@synthesize locations = _locations;- (void)setLocations:(NSArray *)locations {    _locations = locations;    _gradientLayer.locations = _locations;}- (NSArray *)locations {    return _locations;}@synthesize startPoint = _startPoint;- (void)setStartPoint:(CGPoint)startPoint {    _startPoint = startPoint;    _gradientLayer.startPoint = startPoint;}- (CGPoint)startPoint {    return _startPoint;}@synthesize endPoint = _endPoint;- (void)setEndPoint:(CGPoint)endPoint {    _endPoint = endPoint;    _gradientLayer.endPoint = endPoint;}- (CGPoint)endPoint {    return _endPoint;}@end
////  UIView+SetRect.h//  TestPch////  Created by YouXianMing on 14-9-26.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import 
@interface UIView (SetRect)// Frame@property (nonatomic) CGPoint viewOrigin;@property (nonatomic) CGSize viewSize;// Frame Origin@property (nonatomic) CGFloat x;@property (nonatomic) CGFloat y;// Frame Size@property (nonatomic) CGFloat width;@property (nonatomic) CGFloat height;// Frame Borders@property (nonatomic) CGFloat top;@property (nonatomic) CGFloat left;@property (nonatomic) CGFloat bottom;@property (nonatomic) CGFloat right;// Center Point#if !IS_IOS_DEVICE@property (nonatomic) CGPoint center;#endif@property (nonatomic) CGFloat centerX;@property (nonatomic) CGFloat centerY;// Middle Point@property (nonatomic, readonly) CGPoint middlePoint;@property (nonatomic, readonly) CGFloat middleX;@property (nonatomic, readonly) CGFloat middleY;@end
////  UIView+SetRect.m//  TestPch////  Created by YouXianMing on 14-9-26.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "UIView+SetRect.h"@implementation UIView (SetRect)#pragma mark Frame- (CGPoint)viewOrigin{    return self.frame.origin;}- (void)setViewOrigin:(CGPoint)newOrigin{    CGRect newFrame = self.frame;    newFrame.origin = newOrigin;    self.frame = newFrame;}- (CGSize)viewSize{    return self.frame.size;}- (void)setViewSize:(CGSize)newSize{    CGRect newFrame = self.frame;    newFrame.size = newSize;    self.frame = newFrame;}#pragma mark Frame Origin- (CGFloat)x{    return self.frame.origin.x;}- (void)setX:(CGFloat)newX{    CGRect newFrame = self.frame;    newFrame.origin.x = newX;    self.frame = newFrame;}- (CGFloat)y{    return self.frame.origin.y;}- (void)setY:(CGFloat)newY{    CGRect newFrame = self.frame;    newFrame.origin.y = newY;    self.frame = newFrame;}#pragma mark Frame Size- (CGFloat)height{    return self.frame.size.height;}- (void)setHeight:(CGFloat)newHeight{    CGRect newFrame = self.frame;    newFrame.size.height = newHeight;    self.frame = newFrame;}- (CGFloat)width{    return self.frame.size.width;}- (void)setWidth:(CGFloat)newWidth{    CGRect newFrame = self.frame;    newFrame.size.width = newWidth;    self.frame = newFrame;}#pragma mark Frame Borders- (CGFloat)left{    return self.x;}- (void)setLeft:(CGFloat)left{    self.x = left;}- (CGFloat)right{    return self.frame.origin.x + self.frame.size.width;}- (void)setRight:(CGFloat)right{    self.x = right - self.width;}- (CGFloat)top{    return self.y;}- (void)setTop:(CGFloat)top{    self.y = top;}- (CGFloat)bottom{    return self.frame.origin.y + self.frame.size.height;}- (void)setBottom:(CGFloat)bottom{    self.y = bottom - self.height;}#pragma mark Center Point#if !IS_IOS_DEVICE- (CGPoint)center{    return CGPointMake(self.left + self.middleX, self.top + self.middleY);}- (void)setCenter:(CGPoint)newCenter{    self.left = newCenter.x - self.middleX;    self.top = newCenter.y - self.middleY;}#endif- (CGFloat)centerX{    return self.center.x;}- (void)setCenterX:(CGFloat)newCenterX{    self.center = CGPointMake(newCenterX, self.center.y);}- (CGFloat)centerY{    return self.center.y;}- (void)setCenterY:(CGFloat)newCenterY{    self.center = CGPointMake(self.center.x, newCenterY);}#pragma mark Middle Point- (CGPoint)middlePoint{    return CGPointMake(self.middleX, self.middleY);}- (CGFloat)middleX{    return self.width / 2;}- (CGFloat)middleY{    return self.height / 2;}@end

 

使用

////  ViewController.m//  ChangeColorLabel////  Created by YouXianMing on 15/6/25.//  Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "ChangeColorLabel.h"#import "UIView+SetRect.h"@interface ViewController () 
@property (nonatomic, strong) ChangeColorLabel *label;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; self.label = [[ChangeColorLabel alloc] initWithFrame:CGRectMake(0, 0, 320, 70)]; self.label.font = [UIFont fontWithName:@"AppleSDGothicNeo-UltraLight" size:40.f]; self.label.textColor = [UIColor redColor]; self.label.changedColor = [UIColor purpleColor]; self.label.text = @"YouXianMing"; self.label.center = self.view.center; self.label.x += 50; [self.label updateLabelView]; [self.view addSubview:self.label]; [self.label colorPercent:0]; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; scrollView.contentSize = CGSizeMake(self.view.width * 2, self.view.height); scrollView.delegate = self; [self.view addSubview:scrollView]; }- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat x = scrollView.contentOffset.x; CGFloat percent = x / self.view.width; [self.label colorPercent:percent];}@end

 

转载于:https://www.cnblogs.com/YouXianMing/p/4598870.html

你可能感兴趣的文章
akka之种子节点
查看>>
不知道做什么时
查看>>
matlab 给某一列乘上一个系数
查看>>
密码学笔记——培根密码
查看>>
Screening technology proved cost effective deal
查看>>
MAC 上升级python为最新版本
查看>>
创业老板不能犯的十种错误
查看>>
Animations介绍及实例
查看>>
判断请求是否为ajax请求
查看>>
【POJ2699】The Maximum Number of Strong Kings(网络流)
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>