229 lines
6.9 KiB
Mathematica
229 lines
6.9 KiB
Mathematica
|
|
//
|
|||
|
|
// QXDrawGiftCenterView.m
|
|||
|
|
// QXLive
|
|||
|
|
//
|
|||
|
|
// Created by 启星 on 2025/8/27.
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#import "QXDrawGiftCenterView.h"
|
|||
|
|
static CGFloat lineWidth = 13;
|
|||
|
|
|
|||
|
|
@implementation QXDrawGiftCenterProgressView
|
|||
|
|
- (instancetype)init
|
|||
|
|
{
|
|||
|
|
self = [super init];
|
|||
|
|
if (self) {
|
|||
|
|
self.progressColor = RGB16(0x32F6CB);
|
|||
|
|
self.backgroundColor = RGB16(0x70ADFA);
|
|||
|
|
self.cycleLabel = [[UILabel alloc] init];
|
|||
|
|
self.cycleLabel.font = [UIFont boldSystemFontOfSize:16];
|
|||
|
|
self.cycleLabel.textColor = RGB16(0xffffff);
|
|||
|
|
[self addSubview:self.cycleLabel];
|
|||
|
|
[self.cycleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
|||
|
|
make.centerX.centerY.equalTo(self);
|
|||
|
|
}];
|
|||
|
|
[self bringSubviewToFront:self.cycleLabel];
|
|||
|
|
}
|
|||
|
|
return self;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
-(void)drawRect:(CGRect)rect{
|
|||
|
|
[super drawRect:rect];
|
|||
|
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
|||
|
|
CGContextSaveGState(context);
|
|||
|
|
|
|||
|
|
// 计算圆心和半径
|
|||
|
|
CGPoint center = CGPointMake(rect.size.width / 2, rect.size.height / 2);
|
|||
|
|
CGFloat radius = MIN(ScaleWidth(70), ScaleWidth(70)) / 2 - lineWidth / 2;
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 绘制进度圆环
|
|||
|
|
[self drawProgressWithCenter:center radius:radius];
|
|||
|
|
|
|||
|
|
CGContextRestoreGState(context);
|
|||
|
|
}
|
|||
|
|
- (void)setProgress:(double)progress {
|
|||
|
|
_progress = MAX(0.0, MIN(1.0, progress)); // 限制在0-1之间
|
|||
|
|
[self setNeedsDisplay];
|
|||
|
|
self.cycleLabel.text = [NSString stringWithFormat:@"%d%%",(int)(progress*100)];
|
|||
|
|
[self bringSubviewToFront:self.cycleLabel];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
- (void)drawProgressWithCenter:(CGPoint)center radius:(CGFloat)radius {
|
|||
|
|
if (self.progress > 0) {
|
|||
|
|
// 计算结束角度(顺时针从顶部开始)
|
|||
|
|
CGFloat endAngle = -M_PI_2 + 2 * M_PI * self.progress;
|
|||
|
|
|
|||
|
|
UIBezierPath *progressPath = [UIBezierPath bezierPathWithArcCenter:center
|
|||
|
|
radius:radius
|
|||
|
|
startAngle:-M_PI_2 // 从顶部开始(-90度)
|
|||
|
|
endAngle:endAngle
|
|||
|
|
clockwise:YES];
|
|||
|
|
[self.progressColor setStroke];
|
|||
|
|
progressPath.lineWidth = lineWidth;
|
|||
|
|
progressPath.lineCapStyle = kCGLineCapRound;
|
|||
|
|
[progressPath stroke];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
@end
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
@implementation QXDrawGiftCenterView
|
|||
|
|
|
|||
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|||
|
|
{
|
|||
|
|
self = [super initWithFrame:frame];
|
|||
|
|
if (self) {
|
|||
|
|
[self initSubviews];
|
|||
|
|
}
|
|||
|
|
return self;
|
|||
|
|
}
|
|||
|
|
-(void)setModel:(QXGiftActivityModel *)model{
|
|||
|
|
_model = model;
|
|||
|
|
if (model.is_xlh.intValue == 1) {
|
|||
|
|
self.hidden = NO;
|
|||
|
|
}else{
|
|||
|
|
self.hidden = YES;
|
|||
|
|
}
|
|||
|
|
double progress = (model.xlh_data.current_num.doubleValue/model.xlh_data.start_num.doubleValue);
|
|||
|
|
[self setProgress:progress];
|
|||
|
|
QXDrawGiftCenterType type = model.xlh_data.status.integerValue;
|
|||
|
|
[self setType:type];
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
-(void)initSubviews{
|
|||
|
|
self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sky_status_bg"]];
|
|||
|
|
self.bgImageView.contentMode = UIViewContentModeScaleToFill;
|
|||
|
|
[self addSubview:self.bgImageView];
|
|||
|
|
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|||
|
|
make.top.left.right.equalTo(self);
|
|||
|
|
make.height.equalTo(self.bgImageView.mas_width);
|
|||
|
|
}];
|
|||
|
|
|
|||
|
|
self.cycleBgView = [[UIView alloc] init];
|
|||
|
|
self.cycleBgView.backgroundColor = RGB16(0x70ADFA);
|
|||
|
|
[self.cycleBgView addRoundedCornersWithRadius:ScaleWidth(35)];
|
|||
|
|
[self addSubview:self.cycleBgView];
|
|||
|
|
[self.cycleBgView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|||
|
|
make.width.height.mas_equalTo(ScaleWidth(70));
|
|||
|
|
make.centerX.equalTo(self.bgImageView);
|
|||
|
|
make.centerY.equalTo(self.bgImageView).offset(10);
|
|||
|
|
}];
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
self.startBtn = [[UIButton alloc] init];
|
|||
|
|
[self.startBtn addTarget:self action:@selector(startAction) forControlEvents:(UIControlEventTouchUpInside)];
|
|||
|
|
[self addSubview:self.startBtn];
|
|||
|
|
[self.startBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
|||
|
|
make.width.mas_equalTo(ScaleWidth(92));
|
|||
|
|
make.height.mas_equalTo(ScaleWidth(54));
|
|||
|
|
make.centerX.equalTo(self);
|
|||
|
|
make.bottom.equalTo(self);
|
|||
|
|
}];
|
|||
|
|
self.progressView = [[QXDrawGiftCenterProgressView alloc] init];
|
|||
|
|
[self.progressView addRoundedCornersWithRadius:ScaleWidth(35)];
|
|||
|
|
[self addSubview:self.progressView];
|
|||
|
|
[self.progressView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|||
|
|
make.width.height.mas_equalTo(ScaleWidth(70));
|
|||
|
|
make.centerX.centerY.equalTo(self.cycleBgView);
|
|||
|
|
// make.centerY.equalTo(self.bgImageView).offset(10);
|
|||
|
|
}];
|
|||
|
|
// [self startHide];
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
-(void)startAction{
|
|||
|
|
switch (self.type) {
|
|||
|
|
case QXDrawGiftCenterTypeWait:{
|
|||
|
|
showToast(@"活动未开始");
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case QXDrawGiftCenterTypeWill:{
|
|||
|
|
showToast(@"活动即将开始");
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case QXDrawGiftCenterTypeStart:{
|
|||
|
|
if (self.startBlock) {
|
|||
|
|
self.startBlock();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
-(void)startHide{
|
|||
|
|
[UIView animateWithDuration:1 animations:^{
|
|||
|
|
// self.bgImageView.alpha = 0;
|
|||
|
|
self.alpha = 0;
|
|||
|
|
} completion:^(BOOL finished) {
|
|||
|
|
[self startShow];
|
|||
|
|
}];
|
|||
|
|
}
|
|||
|
|
-(void)startShow{
|
|||
|
|
[UIView animateWithDuration:1 animations:^{
|
|||
|
|
// self.bgImageView.alpha = 1;
|
|||
|
|
self.alpha = 1;
|
|||
|
|
} completion:^(BOOL finished) {
|
|||
|
|
[self startHide];
|
|||
|
|
}];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
- (void)setProgress:(CGFloat)progress {
|
|||
|
|
_progress = progress;
|
|||
|
|
self.progressView.progress = progress;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
-(void)setActivityType:(QXActivityType)activityType{
|
|||
|
|
_activityType = activityType;
|
|||
|
|
switch (_activityType) {
|
|||
|
|
case QXActivityTypeSky:{
|
|||
|
|
self.bgImageView.image = [UIImage imageNamed:@"sky_status_bg"];
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case QXActivityTypeAge:{
|
|||
|
|
self.bgImageView.image = [UIImage imageNamed:@"age_status_bg"];
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case QXActivityTypeTime:{
|
|||
|
|
self.bgImageView.image = [UIImage imageNamed:@"time_status_bg"];
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
-(void)setType:(QXDrawGiftCenterType)type{
|
|||
|
|
_type = type;
|
|||
|
|
switch (_type) {
|
|||
|
|
case QXDrawGiftCenterTypeWait:{
|
|||
|
|
[self.startBtn setBackgroundImage:[UIImage imageNamed:@"meet_status_wait"] forState:(UIControlStateNormal)];
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case QXDrawGiftCenterTypeWill:{
|
|||
|
|
[self.startBtn setBackgroundImage:[UIImage imageNamed:@"meet_status_will"] forState:(UIControlStateNormal)];
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case QXDrawGiftCenterTypeStart:{
|
|||
|
|
[self.startBtn setBackgroundImage:[UIImage imageNamed:@"meet_status_start"] forState:(UIControlStateNormal)];
|
|||
|
|
[self setProgress:1];
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
@end
|
|||
|
|
|
|||
|
|
|
|||
|
|
|