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