Files
featherVoice/TUIKit/TUIChat/CommonModel/TUICircleLodingView.m

101 lines
3.0 KiB
Mathematica
Raw Normal View History

2025-08-08 10:49:36 +08:00
//
// TUICircleLodingView.m
// TUIChat
//
// Created by wyl on 2023/4/24.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUICircleLodingView.h"
#define kCircleUnFillColor [[UIColor whiteColor] colorWithAlphaComponent:0.4]
#define kCircleFillColor [UIColor whiteColor]
@interface TUICircleLodingView ()
@end
@implementation TUICircleLodingView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self drawProgressCircleWithEndAngle:-M_PI_2 + M_PI * 2 isGrayCircle:YES];
}
return self;
}
- (void)setProgress:(double)progress {
_progress = progress;
self.labProgress.text = [NSString stringWithFormat:@"%.0f%%", progress];
[self drawProgress];
}
- (void)drawProgress {
if (self.progress >= 100) {
return;
}
[self drawProgressCircleWithEndAngle:-M_PI_2 + M_PI * 2 * (self.progress) * 0.01 isGrayCircle:NO];
}
- (void)drawProgressCircleWithEndAngle:(CGFloat)endAngle isGrayCircle:(BOOL)isGrayCircle {
CGPoint center = CGPointMake(self.frame.size.width / 2, self.frame.size.width / 2);
CGFloat radius = self.frame.size.width / 2;
CGFloat startA = -M_PI_2;
CGFloat endA = endAngle;
CAShapeLayer *layer;
if (isGrayCircle) {
layer = self.grayProgressLayer;
} else {
layer = self.progressLayer;
}
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];
layer.path = [path CGPath];
}
- (UILabel *)labProgress {
if (!_labProgress) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
label.textAlignment = NSTextAlignmentCenter;
label.center = CGPointMake(self.frame.size.width / 2, self.frame.size.width / 2);
label.textColor = kCircleFillColor;
label.font = [UIFont systemFontOfSize:10];
[self addSubview:label];
_labProgress = label;
}
return _labProgress;
}
- (CAShapeLayer *)grayProgressLayer {
if (!_grayProgressLayer) {
_grayProgressLayer = [CAShapeLayer layer];
_grayProgressLayer.frame = self.bounds;
_grayProgressLayer.fillColor = [[UIColor clearColor] CGColor];
_grayProgressLayer.strokeColor = kCircleUnFillColor.CGColor;
_grayProgressLayer.opacity = 1;
_grayProgressLayer.lineCap = kCALineCapRound;
_grayProgressLayer.lineWidth = 3;
[self.layer addSublayer:_grayProgressLayer];
}
return _grayProgressLayer;
}
- (CAShapeLayer *)progressLayer {
if (!_progressLayer) {
_progressLayer = [CAShapeLayer layer];
_progressLayer.frame = self.bounds;
_progressLayer.fillColor = [[UIColor clearColor] CGColor];
_progressLayer.strokeColor = kCircleFillColor.CGColor;
_progressLayer.opacity = 1;
_progressLayer.lineCap = kCALineCapRound;
_progressLayer.lineWidth = 3;
[self.layer addSublayer:_progressLayer];
}
return _progressLayer;
}
@end