iOS之用NSTimer定时刷新按钮的文字,避免按钮闪烁的办法

今天做一个功能,一开始将某按钮置灰,然后倒计时60秒。每秒钟都刷新按钮的文字,倒计时结束后,使按钮可用。很快就做好了,不过发现一个问题,就是按钮会闪烁,跟星星似的。我的代码是:

 _countDown = 60;
    UIColor *color = self.canSend ? [UIColor colorWithRed:40.0/255.0 green:90.0/255.0f blue:190.0/255.0f alpha:1.0f] : [UIColor grayColor];
    self.smsButton = [UIButton createButtonWithStyle:UIButtonTypeRoundedRect
                                              withFrame:CGRectMake(80, 0, 100, 30)
                                              withTitle:NSLocalizedString(@"重发验证码", nil)
                                         withTitleColor:color
                                     withBackgroudColor:nil
                                        withNormalImage:nil
                                   withHighlightedImage:nil
                               withNormalBackgroudImage:nil
                         withHighlightedBackgroundImage:nil
                                              withTarge:self
                                             withAction:@selector(startTimer:)
                                           actionHandle:^(UIButton *sender) {
                                               
                                           }];

- (void)startTimer {
    [self.smsButton setEnabled:NO];
    _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}


- (void)onTimer {
    if (_countDown > 0) {
        [self.smsButton setTitle:[NSString stringWithFormat:@"%d秒重新获取", _countDown] forState:UIControlStateDisabled];
        _countDown--;
    } else {
        _countDown = 60;
        [_timer invalidate];
        _timer = nil;
        [self.smsButton setTitle:@"60秒重新获取" forState:UIControlStateDisabled];
        [self.smsButton setTitle:@"重发验证码" forState:UIControlStateNormal];
        [self.smsButton setEnabled:YES];
    }
}


解决方法:

将UIButton的类型由system改为custom就OK










  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闪烁文字,多种闪烁效果 https://github.com/Zws-China/WSShiningLabel WSShiningLabel *label1 = [[WSShiningLabel alloc] init]; label1.frame = CGRectMake(50, 35, 200, 25); label1.text = @"当保护你的她"; label1.textColor = [UIColor grayColor]; label1.font = [UIFont systemFontOfSize:20]; [label1 startShimmer]; // 开启闪烁 [self.view addSubview:label1]; WSShiningLabel *label2 = [[WSShiningLabel alloc] init]; label2.frame = CGRectMake(50, 105, 200, 25); label2.text = @"变成要你保护的她"; label2.textColor = [UIColor grayColor]; label2.font = [UIFont systemFontOfSize:20]; label2.shimmerType = ST_RightToLeft; // 滚动方向 right to left label2.durationTime = 1; // 滚动时间 label2.shimmerColor = [UIColor orangeColor]; // 高亮颜色 [label2 startShimmer]; // 开启闪烁 [self.view addSubview:label2]; WSShiningLabel *label3 = [[WSShiningLabel alloc] init]; label3.frame = CGRectMake(50, 175, 200, 25); label3.text = @"当你远离了家"; label3.textColor = [UIColor grayColor]; label3.font = [UIFont systemFontOfSize:20]; label3.shimmerType = ST_AutoReverse; // 滚动方向 左右来回 label3.shimmerWidth = 20; // 高亮的宽度 label3.shimmerRadius = 20; // 阴影的宽度 label3.shimmerColor = [UIColor yellowColor]; // 高亮颜色 [label3 startShimmer]; // 开启闪烁 [self.view addSubview:label3]; WSShiningLabel *label4 = [[WSShiningLabel alloc] init]; label4.frame = CGRectMake(50, 245, 200, 25); label4.text = @"努力有了你爱的她"; label4.textColor = [UIColor grayColor]; label4.font = [UIFont systemFontOfSize:20]; label4.shimmerType = ST_ShimmerAll; // 闪烁 label4.durationTime = 0.8; label4.shimmerColor = [UIColor redColor]; [label4 startShimmer]; [self.view addSubview:label4];

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值