zoukankan      html  css  js  c++  java
  • 倒计时特效的CountAnimationLabel

    倒计时特效的CountAnimationLabel

    效果:

    源码:

    CountAnimationLabel.h 与 CountAnimationLabel.m

    //
    //  CountAnimationLabel.h
    //  YouXianClock
    //
    //  Created by YouXianMing on 14-10-14.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface CountAnimationLabel : UIView
    
    @property (nonatomic, strong) NSString *text;       // 文本的文字
    @property (nonatomic, strong) UIFont   *font;       // 文本的字体
    
    @property (nonatomic, assign) CGFloat   startScale; // 最初处于alpha = 0状态时的scale值
    @property (nonatomic, assign) CGFloat   endScale;   // 最后处于alpha = 0状态时的scale值
    
    @property (nonatomic, strong) UIColor  *backedLabelColor; // 不会消失的那个label的颜色
    
    
    @property (nonatomic, assign) NSTimeInterval  fadeInDuration;   // 默认值为1s
    @property (nonatomic, assign) NSTimeInterval  fadeOutDuration;  // 默认值为2s
    @property (nonatomic, assign) NSTimeInterval  showDuration;     // 默认值为0.5s
    @property (nonatomic, assign) BOOL            removeOnComplete; // 动画结束后是否被移除掉
    
    - (void)startAnimation;
    
    @end
    //
    //  CountAnimationLabel.m
    //  YouXianClock
    //
    //  Created by YouXianMing on 14-10-14.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "CountAnimationLabel.h"
    
    @interface CountAnimationLabel ()
    
    @property (nonatomic, strong) UILabel  *backedLabel;
    
    @end
    
    @implementation CountAnimationLabel
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            _backedLabel = [[UILabel alloc] initWithFrame:self.bounds];
            
            // 初始时的alpha值为0
            _backedLabel.alpha = 0;
            
            // 文本居中
            _backedLabel.textAlignment = NSTextAlignmentCenter;
            
            [self addSubview:_backedLabel];
        }
        return self;
    }
    
    - (void)startAnimation
    {
        // 判断endScale的值
        if (_endScale == 0) {
            _endScale = 2.f;
        }
        
        // 开始第一次动画
        [UIView animateWithDuration:(_fadeInDuration > 0 ?_fadeInDuration : 1.f)
                              delay:0
             usingSpringWithDamping:7
              initialSpringVelocity:4
                            options:UIViewAnimationOptionCurveEaseInOut
                         animations:^{
                             // 恢复正常尺寸
                             _backedLabel.alpha     = 1.f;
                             _backedLabel.transform = CGAffineTransformMake(1, 0, 0, 1, 0, 0);
                         }
                         completion:^(BOOL finished) {
                             
                             // 开始第二次动画
                             [UIView animateWithDuration:(_fadeOutDuration > 0 ? _fadeOutDuration : 2.f)
                                                   delay:(_showDuration > 0 ? _showDuration : 0.5f)
                                  usingSpringWithDamping:7
                                   initialSpringVelocity:4
                                                 options:UIViewAnimationOptionCurveEaseInOut
                                              animations:^{
                                                  _backedLabel.alpha     = 0.f;
                                                  _backedLabel.transform = CGAffineTransformMake(_endScale, 0, 0, _endScale, 0, 0);
                                              }
                                              completion:^(BOOL finished) {
                                                  if (_removeOnComplete == YES) {
                                                      [self removeFromSuperview];
                                                  }
                                              }];
                         }];
    }
    
    #pragma mark - 重写setter,getter方法
    #pragma mark - 重写setter方法
    @synthesize text = _text;
    - (void)setText:(NSString *)text
    {
        _text             = text;
        _backedLabel.text = text;
    }
    - (NSString *)text
    {
        return _text;
    }
    
    @synthesize startScale = _startScale;
    - (void)setStartScale:(CGFloat)startScale
    {
        _startScale = startScale;
        _backedLabel.transform = CGAffineTransformMake(startScale, 0, 0, startScale, 0, 0);
    }
    - (CGFloat)startScale
    {
        return _startScale;
    }
    
    @synthesize font = _font;
    - (void)setFont:(UIFont *)font
    {
        _font = font;
        _backedLabel.font = font;
    }
    - (UIFont *)font
    {
        return _font;
    }
    
    @synthesize backedLabelColor = _backedLabelColor;
    - (void)setBackedLabelColor:(UIColor *)backedLabelColor
    {
        _backedLabelColor = backedLabelColor;
        _backedLabel.textColor = backedLabelColor;
    }
    
    @end

    以下是使用详情:

  • 相关阅读:
    线程、协程、Goroutine的区别和联系
    Docker是如何实现跨平台的等问题
    Docker容器与虚拟机有什么区别?
    带www和不带www的域名有什么区别
    netty 入门前阅读
    netty 入门示例
    thingsboard 入门教程
    RSAUtil 工具类
    java zip 打包
    redis 详细讲解
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4027372.html
Copyright © 2011-2022 走看看