Files
featherVoice/QXLive/Room(房间)/View/红包/QXRedBagDrawView.m
2025-10-20 10:29:42 +08:00

553 lines
20 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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