Files
peko-ios/YuMi/Modules/YMRoom/View/SendRedPacket/PIRoomEnterRedPacketView.m
eggmanQQQ 6e1b8fab1a 基本完成 #64 功能
1. 移除旧游戏入口,增加新游戏入口
2. GameMenuView 增加同时支持玩法和小游戏
3. 增加房间类型的判断
4. 补充提示文本,部份未作多语言化,需要核对

优化:
1. 修正部分不正确的单词
2. 优化部份 API 的调用时机
2024-05-31 18:52:12 +08:00

298 lines
12 KiB
Objective-C

//
// PIRoomEnterRedPacketView.m
// YuMi
//
// Created by duoban on 2023/10/20.
//
#import "PIRoomEnterRedPacketView.h"
#import "CountDownHelper.h"
#import "XPRedPacketResultModel.h"
#import "Api+Room.h"
@interface PIRoomEnterRedPacketView ()<CountDownHelperDelegate>
@property(nonatomic,strong) UIImageView *bgImageView;
@property(nonatomic,strong) UIButton *robBtn;
///倒计时
@property(nonatomic,strong) UILabel *countDownView;
///倒计时
@property (nonatomic,strong) CountDownHelper *countDownHelper;
///红点
@property(nonatomic,strong) UILabel *redPoionNumView;
@property(nonatomic,strong) UIView *redPoionView;
///打开
@property(nonatomic,strong) UIButton *openBtn;
@end
@implementation PIRoomEnterRedPacketView
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if(self){
[self installUI];
[self installConstraints];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(openRedPacketResult:) name:@"kOpenRedPacketResult" object:nil];
}
return self;
}
-(void)openRedPacketResult:(NSNotification *)not{
XPRedPacketResultModel *resultModel = not.object;
self.redPacketModel.result = [resultModel mj_JSONObject];
if(resultModel.redEnvelopeVO.pickNum.integerValue == resultModel.redEnvelopeVO.totalNum.integerValue){
[self.redPacketList removeObject:self.redPacketModel];
if(self.redPacketList.count == 0){
self.hidden = YES;
return;
}
self.redPacketModel = self.redPacketList.firstObject;
if(self.type == RoomType_MiniGame){
self.hidden = self.isInRoom == NO;
}else{
self.hidden = self.isInRoom == YES;
}
self.pi_redNum = @(self.redPacketList.count).stringValue;
}
}
-(void)installUI{
[self addSubview:self.bgImageView];
[self.bgImageView addSubview:self.robBtn];
[self.bgImageView addSubview:self.countDownView];
[self.bgImageView addSubview:self.redPoionView];
[self.redPoionView addSubview:self.redPoionNumView];
[self addSubview:self.openBtn];
}
-(void)installConstraints{
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
}];
[self.robBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(kGetScaleWidth(36));
make.height.mas_equalTo(kGetScaleWidth(15));
make.bottom.mas_equalTo(-kGetScaleWidth(10));
make.centerX.equalTo(self.bgImageView);
}];
[self.countDownView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.robBtn);
}];
[self.redPoionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(kGetScaleWidth(12));
make.width.mas_greaterThanOrEqualTo(kGetScaleWidth(12));
make.bottom.equalTo(self.robBtn.mas_top).mas_offset(-kGetScaleWidth(17));
make.trailing.equalTo(self.robBtn.mas_trailing).mas_equalTo(kGetScaleWidth(6));
}];
[self.redPoionNumView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.redPoionView);
make.leading.trailing.equalTo(self.redPoionView).inset(kGetScaleWidth(3));
}];
[self.openBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
}];
}
-(void)setPi_redNum:(NSString *)pi_redNum{
_pi_redNum = pi_redNum;
_redPoionNumView.text = _pi_redNum.integerValue > 99 ? @"99+" : _pi_redNum;
}
-(void)setRedPacketModel:(XPRedPacketModel *)redPacketModel{
_redPacketModel = redPacketModel;
self.countDownView.hidden = YES;
self.robBtn.hidden = YES;
if(_redPacketModel.kind == RedPacketConditionsType_NO){
if(_redPacketModel.validityType == 1){
NSInteger time = [self getTimeDifferenceWithTimestamp:_redPacketModel.timestamp / 1000 beginTime:_redPacketModel.beginTime / 1000];
if(time > 0){
self.countDownView.hidden = NO;
[self.countDownHelper openCountdownWithTime:(int)time];
}else{
self.robBtn.hidden = NO;
}
}else{
self.robBtn.hidden = NO;
}
}else if(_redPacketModel.kind == RedPacketConditionsType_Followd){
NSInteger time = [self getTimeDifferenceWithTimestamp:_redPacketModel.timestamp / 1000 beginTime:_redPacketModel.beginTime / 1000];
if(time > 0){
self.countDownView.hidden = NO;
[self.countDownHelper openCountdownWithTime:(int)time];
}else{
self.robBtn.hidden = NO;
}
}else if(_redPacketModel.kind == RedPacketConditionsType_Share){
NSInteger time = [self getTimeDifferenceWithTimestamp:_redPacketModel.timestamp / 1000 beginTime:_redPacketModel.beginTime / 1000];
if(time > 0){
self.countDownView.hidden = NO;
[self.countDownHelper openCountdownWithTime:(int)time];
}else{
self.robBtn.hidden = NO;
}
}else if(_redPacketModel.kind == RedPacketConditionsType_Scrolling){
NSInteger time = [self getTimeDifferenceWithTimestamp:_redPacketModel.timestamp / 1000 beginTime:_redPacketModel.beginTime / 1000];
if(time > 0){
self.countDownView.hidden = NO;
[self.countDownHelper openCountdownWithTime:(int)time];
}else{
self.robBtn.hidden = NO;
}
}
}
-(NSInteger)getTimeDifferenceWithTimestamp:(long)timestamp beginTime:(long)beginTime {
NSString *time1 = [NSDate timestampSwitchTime:(NSInteger)timestamp formatter:@"YYYY-MM-dd hh:mm:ss"];
NSString *time2 = [NSDate timestampSwitchTime:(NSInteger)beginTime formatter:@"YYYY-MM-dd hh:mm:ss"];
NSInteger second = [NSDate pleaseInsertStarTimeo:time1 andInsertEndTime:time2];
return second;
}
#pragma mark- CountDownHelperDelegate
///倒计时结束
- (void)onCountdownFinish{
self.countDownView.hidden = YES;
self.robBtn.hidden = NO;
}
///倒计时进行
- (void)onCountdownOpen:(int)time{
NSInteger seconds = time;
int minutes = (seconds)%3600/60;
int second = (seconds)%60;
self.countDownView.text = [NSString stringWithFormat:@"%02d:%02d",minutes,second];
}
-(void)setRedPacketList:(NSMutableArray *)redPacketList{
_redPacketList = redPacketList;
if(_redPacketList.count > 0){
self.redPacketModel = _redPacketList.firstObject;
if(self.type == RoomType_MiniGame){
self.hidden = self.isInRoom == NO;
}else{
self.hidden = self.isInRoom == YES;
}
self.pi_redNum = @(_redPacketList.count).stringValue;
}
}
-(void)openBtnAction{
self.openBtn.enabled = NO;
[XNDJTDDLoadingTool showLoading];
[Api getRedPacket:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
self.openBtn.enabled = YES;
[XNDJTDDLoadingTool hideHUD];
if(code == 200){
XPRedPacketModel *redModel = [XPRedPacketModel modelWithJSON:data.data];
if(redModel.kind == 0){
redModel.kind = 1;
}
redModel.timestamp = data.timestamp;
redModel.sendUserNick = data.data[@"nick"];
redModel.sendUserAvatar = data.data[@"avatar"];
redModel.redEnvelopePosition = data.data[@"position"];
if(redModel.state == 2 || redModel.state == 6){
[self.redPacketList removeObject:self.self.redPacketModel];
if(self.redPacketList.count == 0){
self.hidden = YES;
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomActivityContainerView3")];
return;
}
self.redPacketModel = self.redPacketList.firstObject;
self.hidden = NO;
self.pi_redNum = @(self.redPacketList.count).stringValue;
if(self.delegate && [self.delegate respondsToSelector:@selector(openRedPacketWithModelopenRedPacketWithModelopenRedPacketWithModel:)]){
[self.delegate openRedPacketWithModel:self.redPacketModel];
}
return;
}
XPRedPacketResultModel *resultModel = [XPRedPacketResultModel modelWithDictionary:redModel.result];
if(redModel.state == 3 || redModel.state == 4){
if(resultModel.redEnvelopeVO.pickNum.integerValue == resultModel.redEnvelopeVO.totalNum.integerValue){
[self.redPacketList removeObject:self.self.redPacketModel];
if(self.redPacketList.count == 0){
self.hidden = YES;
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomActivityContainerView3")];
return;
}
self.redPacketModel = self.redPacketList.firstObject;
self.hidden = NO;
self.pi_redNum = @(self.redPacketList.count).stringValue;
return;
}
}
[self.redPacketList replaceObjectAtIndex:[self.redPacketList indexOfObject:self.redPacketModel] withObject:redModel];
self.redPacketModel = redModel;
if(self.delegate && [self.delegate respondsToSelector:@selector(openRedPacketWithModelopenRedPacketWithModelopenRedPacketWithModel:)]){
[self.delegate openRedPacketWithModel:self.redPacketModel];
}
}
} redEnvelopeId:self.redPacketModel.redEnvelopeId];
}
#pragma mark - 懒加载
- (UIImageView *)bgImageView{
if(!_bgImageView){
_bgImageView = [UIImageView new];
_bgImageView.image = kImage(@"pi_red_packet_enter_bg");
_bgImageView.userInteractionEnabled = YES;
}
return _bgImageView;
}
-(UIButton *)robBtn{
if(!_robBtn){
_robBtn = [UIButton new];
[_robBtn setBackgroundImage:kImage(@"pi_red_packet_enter_rob_icon") forState:UIControlStateNormal];
[_robBtn setTitle:YMLocalizedString(@"PIRoomEnterRedPacketView0") forState:UIControlStateNormal];
[_robBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_robBtn.titleLabel.font = kFontMedium(9);
}
return _robBtn;
}
- (UILabel *)countDownView{
if(!_countDownView){
_countDownView = [UILabel labelInitWithText:@"00:00" font:kFontSemibold(10) textColor:[UIColor whiteColor]];
_countDownView.textAlignment = NSTextAlignmentCenter;
_countDownView.layer.cornerRadius = kGetScaleWidth(15)/2;
_countDownView.layer.masksToBounds = YES;
_countDownView.backgroundColor = UIColorRGBAlpha(0x292929, 0.6);
}
return _countDownView;
}
- (CountDownHelper *)countDownHelper{
if (!_countDownHelper){
_countDownHelper = [[CountDownHelper alloc]init];
_countDownHelper.delegate = self;
}
return _countDownHelper;
}
- (UIView *)redPoionView{
if(!_redPoionView){
_redPoionView = [UIView new];
_redPoionView.backgroundColor = UIColorFromRGB(0xF44646);
_redPoionView.layer.cornerRadius = kGetScaleWidth(12)/2;
_redPoionView.layer.masksToBounds = YES;
}
return _redPoionView;
}
- (UILabel *)redPoionNumView{
if(!_redPoionNumView){
_redPoionNumView = [UILabel labelInitWithText:@"0" font:kFontMedium(9) textColor:[UIColor whiteColor]];
_redPoionNumView.textAlignment = NSTextAlignmentCenter;
}
return _redPoionNumView;
}
- (UIButton *)openBtn{
if(!_openBtn){
_openBtn = [UIButton new];
[_openBtn addTarget:self action:@selector(openBtnAction) forControlEvents:UIControlEventTouchUpInside];
}
return _openBtn;
}
@end