// // QXRedBagDrawView.m // QXLive // // Created by 启星 on 2025/10/11. // #import "QXRedBagDrawView.h" #import "QXRedBagRecordViewController.h" #import "QXMineNetwork.h" @class QXRedBagTimeDownView; @interface QXRedBagDrawView() @property (nonatomic,strong)UIView *bgView; @property (nonatomic,strong)UIImageView *bgImageView; @property (nonatomic,strong)UIImageView *pwdImageView; @property (nonatomic,strong)UIImageView *userHeaderImageView; @property (nonatomic,strong)UILabel *userNameLabel; @property (nonatomic,strong)UILabel *remarkLabel; @property (nonatomic,strong)UIButton *closeBtn; /// 开红包 @property (nonatomic,strong)UIButton *openBtn; /// 查看大家手气 @property (nonatomic,strong)UIButton *recordBtn; /// 倒计时 @property (nonatomic,strong)QXRedBagTimeDownView *timeDownView; /// 参与条件 @property (nonatomic,strong)UIView *pwdBgView; @property (nonatomic,strong)UILabel *drawTitleLabel; @property (nonatomic,strong)UILabel *commentTitleLabel; @property (nonatomic,strong)UILabel *pwdTitleLable; /// 抢红包必须在本房间内 @property (nonatomic,strong)UILabel *bottomLabel; @property (nonatomic,assign)QXRedBagDrawType drawType; @property (nonatomic,assign)BOOL isDrawNet; @end @implementation QXRedBagDrawView - (instancetype)init { self = [super init]; if (self) { self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); [self initSubviews]; } return self; } -(void)initSubviews{ self.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.3]; self.bgView = [[UIView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-345)/2, (SCREEN_HEIGHT-454)/2, 345, 454)]; [self addSubview:self.bgView]; self.bgImageView = [[UIImageView alloc] initWithFrame:self.bgView.bounds]; self.bgImageView.image = [UIImage imageNamed:@"room_draw_redbag_bg"]; [self.bgView addSubview:self.bgImageView]; self.pwdImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"red_packet_pwd_icon"]]; self.pwdImageView.frame = CGRectMake(0, 0, 119, 41); self.pwdImageView.hidden = YES; [self.bgView addSubview:self.pwdImageView]; self.closeBtn = [[UIButton alloc] init]; [self.closeBtn setImage:[UIImage imageNamed:@"room_redbag_close"] forState:(UIControlStateNormal)]; [self.closeBtn addTarget:self action:@selector(closeAction) forControlEvents:(UIControlEventTouchUpInside)]; [self.bgView addSubview:self.closeBtn]; [self.closeBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(40); make.right.mas_equalTo(-5); make.top.mas_equalTo(15); }]; self.userHeaderImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"user_header_placehoulder"]]; self.userHeaderImageView.contentMode = UIViewContentModeScaleAspectFill; [self.userHeaderImageView addRoundedCornersWithRadius:39.5]; [self.bgView addSubview:self.userHeaderImageView]; [self.userHeaderImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.bgView); make.top.mas_equalTo(73); make.width.height.mas_equalTo(79); }]; self.userNameLabel = [[UILabel alloc] init]; self.userNameLabel.text = @"傻狗涛"; self.userNameLabel.textColor = RGB16(0xffffff); self.userNameLabel.font = [UIFont boldSystemFontOfSize:18]; self.userNameLabel.textAlignment = NSTextAlignmentCenter; [self.bgView addSubview:self.userNameLabel]; [self.userNameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(15); make.right.mas_equalTo(-15); make.height.mas_equalTo(26); make.top.equalTo(self.userHeaderImageView.mas_bottom).offset(27); }]; self.remarkLabel = [[UILabel alloc] init]; self.remarkLabel.textColor = RGB16(0xffffff); self.remarkLabel.text = @"恭喜发财,大吉大利"; self.remarkLabel.font = [UIFont boldSystemFontOfSize:24]; self.remarkLabel.textAlignment = NSTextAlignmentCenter; [self.bgView addSubview:self.remarkLabel]; [self.remarkLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(15); make.right.mas_equalTo(-15); make.height.mas_equalTo(26); make.top.equalTo(self.userNameLabel.mas_bottom).offset(2); }]; self.openBtn = [[UIButton alloc] init]; [self.openBtn setImage:[UIImage imageNamed:@"draw_redbag_btn"] forState:(UIControlStateNormal)]; [self.openBtn addTarget:self action:@selector(openAction) forControlEvents:(UIControlEventTouchUpInside)]; [self.bgView addSubview:self.openBtn]; [self.openBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.remarkLabel.mas_bottom).offset(19); make.width.height.mas_equalTo(126); make.centerX.equalTo(self.bgView); }]; self.recordBtn = [[UIButton alloc] init]; [self.recordBtn setTitle:@"查看大家手气 >" forState:(UIControlStateNormal)]; [self.recordBtn setTitleColor:RGB16(0xffffff) forState:(UIControlStateNormal)]; self.recordBtn.titleLabel.font = [UIFont systemFontOfSize:16]; [self.recordBtn addTarget:self action:@selector(recordAction) forControlEvents:(UIControlEventTouchUpInside)]; [self.bgView addSubview:self.recordBtn]; [self.recordBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.bgView); make.bottom.mas_equalTo(-63); make.height.mas_equalTo(26); }]; self.timeDownView = [[QXRedBagTimeDownView alloc] init]; self.timeDownView.hidden = YES; @weakify(self) self.timeDownView.btnBlcok = ^(QXRedBagDrawType type) { @strongify(self); if (type == QXRedBagDrawTypeCollect) { /// 这里去收藏房间 [self collectRoom]; return; } if (self.toInputPwdBlock) { self.toInputPwdBlock(self.redpacketModel.password,self.redpacketModel); } [self hide]; }; [self.bgView addSubview:self.timeDownView]; [self.timeDownView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(220); make.height.mas_equalTo(93); make.centerX.equalTo(self.bgView); make.top.equalTo(self.remarkLabel.mas_bottom).offset(30); }]; self.bottomLabel = [[UILabel alloc] init]; self.bottomLabel.text = @"抢红包必须在本房间内"; self.bottomLabel.hidden = YES; self.bottomLabel.textColor = RGB16(0xffffff); self.bottomLabel.font = [UIFont systemFontOfSize:14]; [self.bgView addSubview:self.bottomLabel]; [self.bottomLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(26); make.bottom.mas_equalTo(-15); make.centerX.equalTo(self.bgView); }]; self.pwdBgView = [[UIView alloc] init]; [self.bgView addSubview:self.pwdBgView]; [self.pwdBgView mas_makeConstraints:^(MASConstraintMaker *make) { make.bottom.equalTo(self.bottomLabel.mas_top); make.left.mas_equalTo(15); make.right.mas_equalTo(-15); make.height.mas_equalTo(72); }]; self.drawTitleLabel = [[UILabel alloc] init]; self.drawTitleLabel.text = @"红包参与条件"; self.drawTitleLabel.textColor = RGB16(0xffffff); self.drawTitleLabel.textAlignment = NSTextAlignmentCenter; self.drawTitleLabel.font = [UIFont systemFontOfSize:12]; [self.pwdBgView addSubview:self.drawTitleLabel]; [self.drawTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.pwdBgView); make.height.mas_equalTo(20); make.centerX.equalTo(self.bgView); }]; self.commentTitleLabel = [[UILabel alloc] init]; self.commentTitleLabel.text = @"发送评论:这是一个口令"; self.commentTitleLabel.textColor = RGB16(0xFFCE47); self.commentTitleLabel.textAlignment = NSTextAlignmentCenter; self.commentTitleLabel.font = [UIFont systemFontOfSize:14]; [self.pwdBgView addSubview:self.commentTitleLabel]; [self.commentTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.drawTitleLabel.mas_bottom).offset(3); make.height.mas_equalTo(20); make.centerX.equalTo(self.bgView);; }]; self.pwdTitleLable = [[UILabel alloc] init]; self.pwdTitleLable.text = @"收藏房间"; self.pwdTitleLable.textColor = RGB16(0xFFCE47); self.pwdTitleLable.textAlignment = NSTextAlignmentCenter; self.pwdTitleLable.font = [UIFont systemFontOfSize:14]; [self.pwdBgView addSubview:self.pwdTitleLable]; [self.pwdTitleLable mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.commentTitleLabel.mas_bottom).offset(3); make.height.mas_equalTo(20); make.centerX.equalTo(self.bgView);; }]; } -(void)collectRoom{ MJWeakSelf [QXMineNetwork roomCollectWithType:@"1" room_id:self.room_id successBlock:^(NSDictionary * _Nonnull dict) { if (weakSelf.collectRoomBlock) { weakSelf.collectRoomBlock(); } weakSelf.isCollectedRoom = YES; if ([weakSelf.redpacketModel canOpenNow]) { [weakSelf setType:(QXRedBagDrawTypeOpen)]; }else{ [weakSelf setType:QXRedBagDrawTypeTimeDown]; } } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { }]; } /** /// 打开红包 QXRedBagDrawTypeOpen = 0, /// 倒计时 QXRedBagDrawTypeTimeDown, /// 收藏房间 QXRedBagDrawTypeCollect, /// 手慢了被领完了 QXRedBagDrawTypeFinished, /// 口令红包发送评论 QXRedBagDrawTypePwdSend, /// 口令红包倒计时 QXRedBagDrawTypePwdTimeDown, /// 口令红包收藏房间 QXRedBagDrawTypePwdCollect, */ -(void)setIsCollectedRoom:(BOOL)isCollectedRoom{ _isCollectedRoom = isCollectedRoom; } -(void)setRedpacketModel:(QXRedPacketModel *)redpacketModel{ _redpacketModel = redpacketModel; [self setType:[self getDrawTypeWithRedpacktModel:redpacketModel]]; self.remarkLabel.text = redpacketModel.remark; [self.userHeaderImageView sd_setImageWithURL:[NSURL URLWithString:redpacketModel.avatar]]; self.userNameLabel.text = [NSString stringWithFormat:@"%@的红包",redpacketModel.nickname]; self.commentTitleLabel.text = [NSString stringWithFormat:@"发送评论:%@",redpacketModel.password]; if (redpacketModel.type.intValue == 2) { self.pwdImageView.hidden = NO; }else{ self.pwdImageView.hidden = YES; } if (self.drawType == QXRedBagDrawTypeOpen) { self.pwdBgView.hidden = YES; self.bottomLabel.hidden = YES; }else{ self.pwdBgView.hidden = NO; self.bottomLabel.hidden = NO; if (redpacketModel.type.intValue == 2) { self.commentTitleLabel.hidden = NO; }else{ self.commentTitleLabel.hidden = YES; } if (redpacketModel.conditions.intValue == 0) { self.pwdTitleLable.hidden = YES; self.drawTitleLabel.hidden = YES; }else{ self.pwdTitleLable.hidden = NO; self.drawTitleLabel.hidden = NO; if ([redpacketModel.conditions isEqualToString:@"1,2"]) { self.pwdTitleLable.text = @"收藏房间,仅麦上用户"; }else if ([redpacketModel.conditions isEqualToString:@"1"]) { self.pwdTitleLable.text = @"收藏房间"; }else if ([redpacketModel.conditions isEqualToString:@"1"]) { self.pwdTitleLable.text = @"仅麦上用户"; } } } } -(void)setIsFromToComment:(BOOL)isFromToComment{ _isFromToComment = isFromToComment; } -(void)setNeedTime:(long)needTime{ _needTime = needTime; NSInteger min = (needTime % 3600) / 60; NSInteger second = needTime % 60; self.timeDownView.timeLabel.text = [NSString stringWithFormat:@"%02ld:%02ld后开启红包",min,(long)second]; } -(void)changeViewType:(QXRedBagDrawType)type{ [self setType:type]; } -(void)setType:(QXRedBagDrawType)type{ _drawType = type; switch (type) { case QXRedBagDrawTypeOpen:{ self.openBtn.hidden = NO; self.remarkLabel.text = self.redpacketModel.remark; self.recordBtn.hidden = YES; self.timeDownView.hidden = YES; self.bottomLabel.hidden = YES; self.pwdBgView.hidden = YES; } break; case QXRedBagDrawTypeFinished:{ self.openBtn.hidden = YES; self.remarkLabel.text = @"手慢了,红包被领完了"; self.recordBtn.hidden = NO; self.timeDownView.hidden = YES; self.bottomLabel.hidden = YES; self.pwdBgView.hidden = YES; } break; case QXRedBagDrawTypeCollect:{ self.openBtn.hidden = YES; self.remarkLabel.text = self.redpacketModel.remark; self.recordBtn.hidden = YES; self.timeDownView.type = QXRedBagDrawTypeCollect; self.timeDownView.hidden = NO; self.bottomLabel.hidden = NO; self.pwdBgView.hidden = NO; self.commentTitleLabel.hidden = YES; self.pwdTitleLable.text= @"收藏房间"; } break; case QXRedBagDrawTypeTimeDown:{ self.openBtn.hidden = YES; self.remarkLabel.text = self.redpacketModel.remark; self.recordBtn.hidden = YES; self.timeDownView.type = QXRedBagDrawTypeTimeDown; self.timeDownView.hidden = NO; self.bottomLabel.hidden = NO; } break; case QXRedBagDrawTypePwdSend:{ self.openBtn.hidden = YES; self.remarkLabel.text = self.redpacketModel.remark; self.recordBtn.hidden = YES; self.timeDownView.type = QXRedBagDrawTypePwdSend; self.timeDownView.hidden = NO; } break; case QXRedBagDrawTypePwdAllTask:{ self.openBtn.hidden = YES; self.remarkLabel.text = @"手慢了,红包被领完了"; self.recordBtn.hidden = NO; } break; default: break; } } #pragma mark - action -(void)closeAction{ [self hide]; } -(void)openAction{ MJWeakSelf if (self.isDrawNet) { return; } self.isDrawNet = YES; [QXMineNetwork drawRedpacketWithRedpacketId:self.redpacketModel.redpacket_id successBlock:^(NSString * _Nonnull code) { weakSelf.isDrawNet = NO; weakSelf.redpacketModel.is_qiang = @"1"; if (code.intValue == 1) { QXRedBagRecordViewController *vc = [[QXRedBagRecordViewController alloc] init]; vc.redbagId = weakSelf.redpacketModel.redpacket_id; [weakSelf.viewController.navigationController pushViewController:vc animated:YES]; [weakSelf hide]; }else if (code.intValue == 2){ showToast(@"您已抢过该红包"); QXRedBagRecordViewController *vc = [[QXRedBagRecordViewController alloc] init]; vc.redbagId = weakSelf.redpacketModel.redpacket_id; [weakSelf.viewController.navigationController pushViewController:vc animated:YES]; [weakSelf hide]; }else{ [weakSelf setType:QXRedBagDrawTypeFinished]; } } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { weakSelf.isDrawNet = NO; showToast(msg); }]; // CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; // //旋转角度 // rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI]; // //每次旋转的时间(单位秒) // rotationAnimation.duration = 0.5; // rotationAnimation.cumulative = YES; // rotationAnimation.removedOnCompletion = NO; // //重复旋转的次数,如果你想要无数次,那么设置成MAXFLOAT // rotationAnimation.repeatCount = MAXFLOAT; // [self.openBtn.layer addAnimation:rotationAnimation forKey:@"openRedBagAnimate"]; // // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // [self.openBtn.layer removeAnimationForKey:@"openRedBagAnimate"]; // // BOOL isDrawed = NO; // if (isDrawed) { // QXRedBagRecordViewController *vc = [[QXRedBagRecordViewController alloc] init]; // vc.redbagId = @""; // [self.viewController.navigationController pushViewController:vc animated:YES]; // [self hide]; // }else{ // [self setType:QXRedBagDrawTypeFinished]; // } // // }); } -(void)recordAction{ QXRedBagRecordViewController *vc = [[QXRedBagRecordViewController alloc] init]; vc.redbagId = self.redpacketModel.redpacket_id; [self.viewController.navigationController pushViewController:vc animated:YES]; [self hide]; } -(QXRedBagDrawType)getDrawTypeWithRedpacktModel:(QXRedPacketModel*)model{ self.drawType = QXRedBagDrawTypeOpen; if (model.type.intValue == 1) { // 普通红包 self.drawType = QXRedBagDrawTypeOpen; /// 倒计时处理 if (model.countdown.intValue > 0) { if ([model remainingTime]>0) { self.drawType = QXRedBagDrawTypeTimeDown; } } /// 收藏房间在先 if ([model.conditions containsString:@"1"] && !self.isCollectedRoom){ self.drawType = QXRedBagDrawTypeCollect; } }else{ // 口令红包 self.drawType = QXRedBagDrawTypePwdSend; if (self.isFromToComment) { if ([model.conditions containsString:@"1"] && !self.isCollectedRoom){ self.drawType = QXRedBagDrawTypeCollect; }else{ if ([self.redpacketModel canOpenNow]) { [self setType:(QXRedBagDrawTypeOpen)]; }else{ [self setType:QXRedBagDrawTypeTimeDown]; } } } } return self.drawType; } -(void)showInView:(UIView *)view{ self.bgView.y = -SCREEN_HEIGHT; [view addSubview:self]; [UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.bgView.y = (SCREEN_HEIGHT-454)/2; } completion:^(BOOL finished) { }]; } -(void)hide{ self.redpacketModel = nil; [UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.bgView.y = SCREEN_HEIGHT; } completion:^(BOOL finished) { [self removeFromSuperview]; }]; } @end @implementation QXRedBagTimeDownView - (instancetype)init { self = [super init]; if (self) { [self initSubViews]; } return self; } -(void)setType:(QXRedBagDrawType)type{ _type = type; switch (type) { case QXRedBagDrawTypeCollect:{ self.timeLabel.text = @"收藏房间抢红包"; } break; case QXRedBagDrawTypeTimeDown:{ self.timeLabel.text = @"00:00后开启红包"; } break; case QXRedBagDrawTypePwdSend:{ self.timeLabel.text = @"发送评论抢红包"; } break; case QXRedBagDrawTypePwdAllTask:{ self.timeLabel.text = @"完成任务抢红包"; } break; default: break; } } -(void)btnClick{ if (self.type == QXRedBagDrawTypePwdSend || self.type == QXRedBagDrawTypeCollect) { if (self.btnBlcok) { self.btnBlcok(self.type); } } } -(void)setTime:(int)time{ _time = time; } -(void)initSubViews{ self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"red_bag_time_down_bg"]]; [self addSubview:self.bgImageView]; [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self); }]; self.timeLabel = [[UILabel alloc] init]; self.timeLabel.textAlignment = NSTextAlignmentCenter; self.timeLabel.font = [UIFont boldSystemFontOfSize:22]; self.timeLabel.textColor = RGB16(0xffffff); [self addSubview:self.timeLabel]; [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self); make.height.mas_equalTo(26); make.top.mas_equalTo(19); }]; self.btn = [[UIButton alloc] init]; [self.btn addTarget:self action:@selector(btnClick) forControlEvents:(UIControlEventTouchUpInside)]; [self addSubview:self.btn]; [self.btn mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self); }]; } @end