zoukankan      html  css  js  c++  java
  • [控件] 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
  • 相关阅读:
    ffmpeg rtmp推流 视频转码
    java日志发展史 log4j slf4j log4j2 jul jcl 日志和各种桥接包的关系
    nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求
    java web http 转https 通过nginx代理访问
    linux 服务器磁盘挂载
    novnc 通过websockify代理 配置多点访问
    linux 文件服务 minio 安装部署配置
    AOP实现原理,手写aop
    java 泛型
    JAVA反射getGenericSuperclass()用法
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4598870.html
Copyright © 2011-2022 走看看