美文网首页
倒计时跳动

倒计时跳动

作者: 守护地中海的花 | 来源:发表于2020-06-06 14:38 被阅读0次
倒计时动画.gif

结构图


image.png
  • 底部有个UIScrollView 滑动范围是2倍的UIScrollView高度
  • topLab bottomLab分别在上下
- (UILabel *)topLab
{
    if (!_topLab) {
        UILabel *lab = [[UILabel alloc]init];
        [self.bgScrollView addSubview:lab];
        lab.font = [UIFont systemFontOfSize:14*ADAPTER_WIDTH weight:UIFontWeightRegular];
        lab.textColor = WhiteColor;
        lab.textAlignment = NSTextAlignmentCenter;
        lab.numberOfLines = 1;
        lab.frame = CGRectMake(0, 0, self.bgScrollView.width, self.bgScrollView.height);
        _topLab = lab;
    }
    return _topLab;
}
- (UILabel *)bottomLab
{
    if (!_bottomLab) {
        UILabel *lab = [[UILabel alloc]init];
        [self.bgScrollView addSubview:lab];
        lab.font = [UIFont systemFontOfSize:14*ADAPTER_WIDTH weight:UIFontWeightRegular];
        lab.textColor = WhiteColor;
        lab.textAlignment = NSTextAlignmentCenter;
        lab.numberOfLines = 1;
        lab.frame = CGRectMake(0, self.bgScrollView.height, self.bgScrollView.width, self.bgScrollView.height);
        _bottomLab = lab;
    }
    return _bottomLab;
}
  • 初始化之前 设定当前UIScrollView的contentOffsetY 是UIScrollView高度一半
[self.bgScrollView setContentOffset:CGPointMake(0, self.bgScrollView.height) animated:NO];
  • 0.5秒contentOffsetY:self.bgScrollView.height 到0
[UIView animateWithDuration:0.5 animations:^{
        self.bgScrollView.contentOffset = CGPointMake(0, 0);
    } completion:^(BOOL finished) {
        self.bgScrollView.contentOffset = CGPointMake(0, self.bgScrollView.height);
        
        NSInteger value = iconModel.value - 1;
        if (value < 0) {
            value = 59;
        }
        self.topLab.text = [NSString stringWithFormat:@"%ld",value];
        self.bottomLab.text = [NSString stringWithFormat:@"%ld",iconModel.value];
    }];

全部代码

  • h
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface ActivityPDTHCountDownItemView : UIView
@property(nonatomic,strong)BaseIconModel *iconModel;
@end

NS_ASSUME_NONNULL_END
  • .m
#import "ActivityPDTHCountDownItemView.h"
@interface ActivityPDTHCountDownItemView ()
@property(nonatomic,strong)UIImageView *bgIV;
@property(nonatomic,strong)UILabel *rightLab;
@property(nonatomic,strong)UIScrollView *bgScrollView;
@property(nonatomic,strong)UILabel *topLab;
@property(nonatomic,strong)UILabel *bottomLab;
@property(nonatomic,assign)NSInteger lastNumber;
@end
@implementation ActivityPDTHCountDownItemView
- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.lastNumber = 100;
        [self bgIV];
        [self.bgScrollView setContentOffset:CGPointMake(0, self.bgScrollView.height) animated:NO];
    }
    return self;
}
- (void)setIconModel:(BaseIconModel *)iconModel
{
    _iconModel = iconModel;
    //记录lastNumber
    if (self.lastNumber == iconModel.value) {
        return;
    }
    self.rightLab.text = iconModel.title;
    if (self.topLab.text.length == 0) {
        NSInteger value = iconModel.value - 1;
        if (value < 0) {
            value = 59;
        }
        self.topLab.text = [NSString stringWithFormat:@"%ld",iconModel.value];
        self.bottomLab.text = [NSString stringWithFormat:@"%ld",value];
    }
    [UIView animateWithDuration:0.5 animations:^{
        self.bgScrollView.contentOffset = CGPointMake(0, 0);
    } completion:^(BOOL finished) {
        self.bgScrollView.contentOffset = CGPointMake(0, self.bgScrollView.height);
        
        NSInteger value = iconModel.value - 1;
        if (value < 0) {
            value = 59;
        }
        self.topLab.text = [NSString stringWithFormat:@"%ld",value];
        self.bottomLab.text = [NSString stringWithFormat:@"%ld",iconModel.value];
    }];
    //记录lastNumber
    self.lastNumber = iconModel.value;
}
#pragma mark - lazy懒加载
- (UIImageView *)bgIV
{
    if (!_bgIV) {
        UIImageView *iv = [[UIImageView alloc]init];
        [self addSubview:iv];
        iv.image = [UIImage getPNGimageInBundleWithName:@"ActivityPage_box"];
        iv.frame = CGRectMake(0, 0, 35*ADAPTER_WIDTH, 37*ADAPTER_WIDTH);
        _bgIV = iv;
    }
    return _bgIV;
}
- (UILabel *)rightLab
{
    if (!_rightLab) {
        UILabel *lab = [[UILabel alloc]init];
        [self addSubview:lab];
        lab.font = [UIFont systemFontOfSize:12*ADAPTER_WIDTH weight:UIFontWeightRegular];
        lab.textColor = kColor80;
        lab.textAlignment = NSTextAlignmentLeft;
        lab.numberOfLines = 1;
        lab.frame = CGRectMake(2*ADAPTER_WIDTH + self.bgIV.right, 15*ADAPTER_WIDTH, 20*ADAPTER_WIDTH, 13*ADAPTER_WIDTH);
        _rightLab = lab;
    }
    return _rightLab;
}
- (UIScrollView *)bgScrollView
{
    if (!_bgScrollView) {
        UIScrollView *view = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 11*ADAPTER_WIDTH, self.bgIV.width, self.bgIV.width - 11*ADAPTER_WIDTH)];
        [self.bgIV addSubview:view];
        view.contentSize = CGSizeMake(0, 2 * (self.bgIV.width - 11*ADAPTER_WIDTH));
        _bgScrollView = view;
    }
    return _bgScrollView;
}
- (UILabel *)topLab
{
    if (!_topLab) {
        UILabel *lab = [[UILabel alloc]init];
        [self.bgScrollView addSubview:lab];
        lab.font = [UIFont systemFontOfSize:14*ADAPTER_WIDTH weight:UIFontWeightRegular];
        lab.textColor = WhiteColor;
        lab.textAlignment = NSTextAlignmentCenter;
        lab.numberOfLines = 1;
        lab.frame = CGRectMake(0, 0, self.bgScrollView.width, self.bgScrollView.height);
        _topLab = lab;
    }
    return _topLab;
}
- (UILabel *)bottomLab
{
    if (!_bottomLab) {
        UILabel *lab = [[UILabel alloc]init];
        [self.bgScrollView addSubview:lab];
        lab.font = [UIFont systemFontOfSize:14*ADAPTER_WIDTH weight:UIFontWeightRegular];
        lab.textColor = WhiteColor;
        lab.textAlignment = NSTextAlignmentCenter;
        lab.numberOfLines = 1;
        lab.frame = CGRectMake(0, self.bgScrollView.height, self.bgScrollView.width, self.bgScrollView.height);
        _bottomLab = lab;
    }
    return _bottomLab;
}
@end

相关文章

  • 倒计时跳动

    结构图 底部有个UIScrollView 滑动范围是2倍的UIScrollView高度 topLab bottom...

  • CocosCreator - 小示例

    代码例子 1.小球不断上下跳动 2.场景切换、倒计时 场景切换: 倒计时自动转换场景 3.输入事件监听操作

  • 皮卡丘的第11天

    回家的路口,等红灯中。看着倒计时的计数跳动着。 13、12、11......3、2、1绿灯亮起,我继续前行。 我在...

  • “醉”倒在秋风里

    九月 随着一段风,来到了秋天的十字路口 红绿灯在倒计时的跳动着 仿佛夏天也在倒计时 等跳到路灯,仿佛就一秒入秋了 ...

  • iOS下UILabel展示“定时器文本”有跳动视觉问题的解决方案

    修改前,有问题的展示效果: 如上所示倒计时重新计数时展示文本UILabel出现跳动和闪烁的问题。 产生原因: 在i...

  • Flutter | 倒计时 label 跳动问题

    大家好,我是无夜之星辰,又到了一天的喝汤环节(我吃肉,你们喝汤)。 今天分享一个实际开发中经常遇到的倒计时 lab...

  • 产品初体验F4_生辰_2017.8.13

    一、整体感觉: 1.生之时(白)用时间维度正序计算,数字跳动;死之钟(黑)用事件维度倒计时计算。 2.全局最大亮点...

  • 字节面试官写的核心面试题遭GitHub“封杀”,却帮我拿下7家o

    字节跳动宣布社招进入倒计时!最后截止日期为4月30日。 同时最后一波超高命中率岗位曝光,其中研发类(Java)岗位...

  • 字节跳动小程序 canvas倒计时环

    概述 一个倒计时环,顺时针减少;中间为数字 主要参数 1.参数: canvasId - canvas的canvas...

  • 路口

    十字路口 埋头看手机的人群死气沉沉 灰空中鸟儿低飞鲜红的数字兀自跳动 吸引眼球这是属于几个人的倒计时仪式感被...

网友评论

      本文标题:倒计时跳动

      本文链接:https://www.haomeiwen.com/subject/clpxtktx.html