倒计时指示器 r囧r小猫 2022-07-18 00:17 183阅读 0赞 \#import "YGSpeedSendGiftView.h" @interface YGSpeedSendGiftView () @property (nonatomic, strong) CAShapeLayer \*progressLayer;//设置路径 @property (nonatomic, strong) CABasicAnimation \*strokeAnimationEnd;//动画 @property (nonatomic, strong) CAAnimationGroup \*animationGroup;//动画组 @property (nonatomic, assign) CGFloat progressLineWidth;//线条宽度 @property (nonatomic, strong) UIColor \*progressLineColor;//线条颜色 @property (nonatomic, assign) NSInteger totalTime;//倒计时时间 @property (nonatomic, copy) SpeedSendGiftClickBlock myBlock;//点击回调 @property (nonatomic, copy) CompleteBlock completeBlock;//完成回调 @property (nonatomic, strong) NSTimer \*timer;//定时器 @property (nonatomic, assign) NSInteger progress; @end @implementation YGSpeedSendGiftView \- (instancetype)initWithFrame:(CGRect)frame totalTime:(NSInteger)totalTime lineWidth:(CGFloat)lineWidth lineColor:(UIColor \*)lineColor clickBlock:(SpeedSendGiftClickBlock)clickBlock completeBlock:(CompleteBlock)completeBlock \{ self = \[self initWithFrame:frame\]; if (self) \{ //保存参数 self.progressLineWidth = lineWidth; self.progressLineColor = lineColor; self.totalTime = totalTime; self.myBlock = clickBlock; self.completeBlock = completeBlock; //添加绘制路线 \[self.layer addSublayer:self.progressLayer\]; \} return self; \} //开始 \- (void)startCountDown \{ \[self cancleTimer\]; self.hidden = NO; self.progress = 0; \[self addTimer\]; \[self.progressLayer addAnimation:self.strokeAnimationEnd forKey:@"group"\]; \} //添加定时器 \- (void)addTimer \{ if (\_timer == nil) \{ \_\_block typeof(self) blockSelf = self; \_\_weak typeof(self) weakSelf = blockSelf; \_timer = \[NSTimer YG\_scheduledTimerWithTimeInterval:1 block:^\{ \_\_strong typeof(self)strongSelf = weakSelf; \[strongSelf setProgressValue\]; \} repeats:YES\]; \} \_timer.status = NO; \[\[NSRunLoop currentRunLoop\] addTimer:\_timer forMode:NSDefaultRunLoopMode\]; \} \- (void)setProgressValue \{ self.progress ++; if (self.progress >= 30) \{ \[self stopCountDown\]; \} \} //停止 \- (void)stopCountDown \{ if (!\_timer.status && \_timer) \{ if (self.strokeAnimationEnd) \{ \[self.progressLayer removeAllAnimations\]; self.hidden = YES; \[self cancleTimer\]; \} if (self.completeBlock) \{ \_completeBlock(); \} \} \_timer.status = NO; \} //设置路径 \- (CAShapeLayer \*)progressLayer \{ if (!\_progressLayer) \{ \_progressLayer = \[CAShapeLayer layer\]; \_progressLayer.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); \_progressLayer.position = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0); \_progressLayer.path = \[UIBezierPath bezierPathWithArcCenter:CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0) radius:(CGRectGetWidth(self.frame) - self.progressLineWidth)/2.0 startAngle:-M\_PI\_2 endAngle:-M\_PI\_2+2\*M\_PI clockwise:YES\].CGPath; \_progressLayer.fillColor = \[UIColor clearColor\].CGColor; \_progressLayer.lineWidth = self.progressLineWidth; \_progressLayer.strokeColor = self.progressLineColor.CGColor; \_progressLayer.strokeEnd = 0; \_progressLayer.strokeStart = 0; \_progressLayer.lineCap = kCALineCapRound; \} return \_progressLayer; \} //动画 \- (CABasicAnimation \*)strokeAnimationEnd \{ if (!\_strokeAnimationEnd) \{ \_strokeAnimationEnd = \[CABasicAnimation animationWithKeyPath:@"strokeEnd"\]; \_strokeAnimationEnd.timingFunction = \[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear\]; \_strokeAnimationEnd.duration = self.totalTime; \_strokeAnimationEnd.fromValue = @1; \_strokeAnimationEnd.toValue = @0; \_strokeAnimationEnd.speed = 1.0; \_strokeAnimationEnd.removedOnCompletion = NO; \} return \_strokeAnimationEnd; \} //取消定时器 \- (void)cancleTimer \{ if (\[\_timer isValid\]) \{ \[\_timer invalidate\]; \_timer = nil; \} \} \- (void)drawRect:(CGRect)rect \{ \[super drawRect:rect\]; UIColor \*color = UIColorFromRGBA(0x000000, 0.4); \[color set\]; //设置线条颜色 UIBezierPath\* aPath = \[UIBezierPath bezierPathWithArcCenter:CGPointMake(CGRectGetWidth(rect)/2.0, CGRectGetHeight(rect)/2.0) radius:(CGRectGetWidth(rect) - \_progressLineWidth)/2.0 startAngle:0 endAngle:M\_PI\*2 clockwise:YES\]; aPath.lineWidth = \_progressLineWidth; aPath.lineCapStyle = kCGLineCapRound; aPath.lineJoinStyle = kCGLineJoinRound; \[aPath stroke\]; \} //退到后台 \- (void)didEnterBackground \{ //记录暂停时间 CFTimeInterval pauseTime = \[self.progressLayer convertTime:CACurrentMediaTime() fromLayer:nil\]; //设置动画速度为0 self.progressLayer.speed = 0; //设置动画的偏移时间 self.progressLayer.timeOffset = pauseTime; //暂停定时器 \[\_timer pause\]; \} //进入前台 \- (void)didBecomeActive \{ //暂停的时间 CFTimeInterval pauseTime = self.progressLayer.timeOffset; //设置动画速度为1 self.progressLayer.speed = 1; //重置偏移时间 self.progressLayer.timeOffset = 0; //重置开始时间 self.progressLayer.beginTime = 0; //计算开始时间 CFTimeInterval timeSincePause = \[self.progressLayer convertTime:CACurrentMediaTime() fromLayer:nil\] - pauseTime; //设置开始时间 self.progressLayer.beginTime = timeSincePause; //开始定时器 \[\_timer resume\]; \} @end
相关 倒计时 js部分: export default function CalcTime(endtime) { var obj = {}; var 男娘i/ 2023年05月31日 06:38/ 0 赞/ 48 阅读
相关 C#倒计时 C\新手,记录一下倒计时,30s的倒计时,附上效果图 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6 柔光的暖阳◎/ 2023年01月19日 03:09/ 0 赞/ 309 阅读
相关 js 天数倒计时 时间倒计时 export function getOverTimeDown(endDateStr: string, outValue?: { value: string }, fn àì夳堔傛蜴生んèń/ 2022年09月11日 12:10/ 0 赞/ 322 阅读
相关 倒计时指示器 \import "YGSpeedSendGiftView.h" @interface YGSpeedSendGiftView () @property (n r囧r小猫/ 2022年07月18日 00:17/ 0 赞/ 184 阅读
相关 倒计时 验证输入手机号 验证码倒计时 ![这里写图片描述][SouthEast]![这里写图片描述][SouthEast 1] \如上图所示 要实现验证码的倒计时的效果 不念不忘少年蓝@/ 2022年06月02日 10:12/ 0 赞/ 404 阅读
相关 JS-实现秒表倒计时+缓存倒计时 实现秒表倒计时+缓存倒计时功能 <!DOCTYPE html> <html> <head> <meta ch 约定不等于承诺〃/ 2022年05月17日 12:38/ 0 赞/ 405 阅读
相关 javascript倒计时 <script type="text/javascript"> clock();//一开始来去初始化倒计时 setI 阳光穿透心脏的1/2处/ 2022年01月26日 15:01/ 0 赞/ 349 阅读
相关 倒计时 js代码 var EndTime= new Date('2017/2/18 00:00:00'); //设置到期时间 var NowTime = ne - 日理万妓/ 2021年12月23日 08:41/ 0 赞/ 540 阅读
相关 js倒计时 ![20190820151447888.png][] function tow(n) { return n >= 0 && - 日理万妓/ 2021年10月19日 09:52/ 0 赞/ 480 阅读
相关 JS 倒计时 经常遇到需要倒计时的地方,下面的JS可以简单实现倒计时,当然可以加上Css使得界面更加美观! `<script type=` `"text/javascript"` `>` 约定不等于承诺〃/ 2021年09月29日 17:34/ 0 赞/ 580 阅读
还没有评论,来说两句吧...