• [控件] ChangeColorLabel


    ChangeColorLabel

    效果

    源码

    //
    //  ChangeColorLabel.h
    //  YXMWeather
    //
    //  Created by XianMingYou on 15/6/22.
    //  Copyright (c) 2015年 XianMingYou. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @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 <UIKit/UIKit.h>
    
    
    @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 <UIKit/UIKit.h>
    
    @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 () <UIScrollViewDelegate>
    
    @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
  • 相关阅读:
    AB(ApacheBench)工具 -- 压力测试
    请求错误 --405
    第三方支付 -----支付宝支付流程
    前后端分离 ---购物车
    canvas实现碰壁反弹(单个小方块)
    h5 的canvas绘制基本图形
    for in 循环
    js创建对象的三种方式和js工厂模式创建对象
    类的继承
    jq操作class类
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4598870.html
Copyright © 2020-2023  润新知