定时器管理button的title 闪现问题
出现场景:
定时器管理button的title,我们最常见的应用就是关于验证码.当我们点击按钮之前, 按钮会显示获取验证码, 当我们点击获取验证码之后, 按钮会以此显示x秒之后重新获取验证码.
实现的效果原理:一般来说设置一个方法,设置一个定时器,每秒循坏执行一次, 改变button的title显示.
遇到问题:
button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame=CGRectMake(SCREEN_WIDTH - STARTX - 120,3 * STARTX + 90 - 1, 120, 47);
[button setBackgroundImage:[UIImage imageNamed:@"register-securityCode-N"] forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:16];
[button setTitle:@"获取验证码" forState:UIControlStateNormal];
button.titleLabel.font = [UIFont boldSystemFontOfSize:[self p6changep4:19 SubtractNum:3]];
[button setTintColor:[UIColor whiteColor]];
[button addTarget:self action:@selector(getSecurityCode:) forControlEvents:UIControlEventTouchUpInside];
[mainScrollView addSubview:button];
- (void)getSecurityCode:(id)sender
{
// if ([[userNameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] == 0) {
// ProgressFailedWith(@"手机号不能为空哦");
// return;
// }
// if (![self isMobileNumber:userNameTextField.text]) {
// ProgressFailedWith(@"手机号码格式不正确");
// return;
// }
[self startTimer];
}
- (void)startTimer
{
secondsCountDown = 60;//60秒倒计时
countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeFireMethod) userInfo:nil repeats:YES];
}
-(void)timeFireMethod
{
secondsCountDown--;
if(secondsCountDown==0){
[button setTitle:@"获取验证码" forState:UIControlStateNormal];
button.titleLabel.font = [UIFont boldSystemFontOfSize:[self p6changep4:19 SubtractNum:3]];
[button setBackgroundImage:[UIImage imageNamed:@"register-securityCode-N"] forState:UIControlStateNormal];
button.userInteractionEnabled = YES;
[countDownTimer invalidate];
countDownTimer = nil;
} else {
button.userInteractionEnabled = NO;
[button setBackgroundImage:[UIImage imageNamed:@"register-securityCode-Y"] forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:14];
[button setTitle:[NSString stringWithFormat:@"%i秒后重新发送",secondsCountDown] forState:UIControlStateNormal];
}
}
这样做的会出现的问题就是: x秒之后重新发送这几个字每秒都会闪一次.
解决办法:
我们看到对于button 的设置我们设置的圆角.合理我们需要设置为自定义.即
button = [UIButton buttonWithType:UIButtonTypeCustom];
这样闪现的效果就没有了.