298 lines
12 KiB
Objective-C
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(openRedPacketWithModel:)]){
|
|
[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(openRedPacketWithModel:)]){
|
|
[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
|