em....
第一次写技术文章,有点激动。做了很久的IOS开发,都没记录下相关的学习知识。于是决定接下来陆陆续续写点文章。
回到正题,本次实现的是倒计时放大效果。用到的知识有 GCD、UIView动画。相对来说还是比较简单易懂的类型。
先上效果图:
![](https://img.haomeiwen.com/i3170012/f76636935699c103.png)
![](https://img.haomeiwen.com/i3170012/f8b1dde6b61d3bac.png)
首先,在新建方法里面实现一个UILabel,并设置字体颜色和文字大小
-(void)secountDown{
countDown =[[UILabel alloc]init];
countDown.text=@"10";
countDown.textColor =FONTCOLOR33;
countDown.font =[UIFont systemFontOfSize:100];
[self.view addSubview:countDown];
[countDown mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
}];
}
其次新建一个GCD倒计时的方法。 这里关于GCD的知识就不解释了,想学习更多的知识,可以网上搜的。
#pragma mark GCD实现倒计时
-(void)thirdBtnAction{
__block NSInteger second = 10;
dispatch_queue_t quene = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, quene);
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
dispatch_async(dispatch_get_main_queue(), ^{
if (second == 0) {
dispatch_cancel(timer);
} else {
second--;
}
});
});
dispatch_resume(timer);
}
创建完了CGD倒计时方法后,就需要去实现每秒该实现的事情。
在动画开始前,我们都需要去初始化UILabel,然后在调用UIView动画去改变UILabel的形态
countDown.text=[NSString stringWithFormat:@"%d",second];
countDown.alpha = 1;
countDown.textColor = FONTCOLOR33;
[UIView animateWithDuration:0.5 animations:^{
countDown.alpha = 0;//透明度
countDown.transform = CGAffineTransformMakeScale(5.0, 5.0);//放大值
} completion:^(BOOL finished) {
countDown.transform = CGAffineTransformIdentity;//回复原大小
}];
至此,倒计时数字放大效果已实现完成。各位同行的大佬,有更好的方法,欢迎指点。
网友评论