// // QXDrifRoomHourRankView.m // QXLive // // Created by 启星 on 2025/8/29. // #import "QXDrifRoomHourRankView.h" @interface QXDrifRoomHourRankView() @property (nonatomic,assign)BOOL isPlaying; @property (nonatomic,assign)BOOL isClose; @end @implementation QXDrifRoomHourRankView - (instancetype)init { self = [super init]; if (self) { self.frame = CGRectMake(SCREEN_WIDTH, ScaleWidth(200), SCREEN_WIDTH, ScaleWidth(90)); BOOL isClose = [[NSUserDefaults standardUserDefaults] boolForKey:kIsCloseDrifPop]; self.isClose = isClose; [self initSubviews]; } return self; } +(instancetype)shareView{ static QXDrifRoomHourRankView *manager = nil; static dispatch_once_t predicate; dispatch_once(&predicate, ^{ manager = [[QXDrifRoomHourRankView alloc] init]; }); return manager; } -(void)initSubviews{ self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ac_meet_start_pop_bg"]]; self.bgImageView.contentMode = UIViewContentModeScaleToFill; [self addSubview:self.bgImageView]; [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(SCREEN_WIDTH); make.height.mas_equalTo(ScaleWidth(90)); make.centerX.equalTo(self); make.top.equalTo(self); }]; self.titleLabel = [[UILabel alloc] init]; self.titleLabel.font = [UIFont systemFontOfSize:12]; self.titleLabel.textColor = RGB16(0xFFFFFF); [self addSubview:self.titleLabel];; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.bgImageView).offset(ScaleWidth(53)); make.centerY.equalTo(self.bgImageView); }]; self.userInteractionEnabled = YES; MJWeakSelf [self addTapBlock:^(id _Nonnull obj) { if ([weakSelf.model.room_id isExist]) { [[QXGlobal shareGlobal] joinRoomWithRoomId:weakSelf.model.room_id isRejoin:NO navagationController:weakSelf.viewController.navigationController]; } }]; } -(void)addActivityModel:(QXRoomHourDriftModel *)model{ if (self.isClose) { return; } [self.dataArray addObject:model]; [self giftAction]; } -(void)addActivityModelList:(NSArray *)list{ if (self.isClose) { return; } [self.dataArray addObjectsFromArray:list]; [self giftAction]; } -(void)giftAction{ if (self.isPlaying) { return; } MJWeakSelf [QXDrifRoomHourRankView shareView].isPlaying = YES; [QXDrifRoomHourRankView shareView].model = [QXDrifRoomHourRankView shareView].dataArray.firstObject; [KEYWINDOW addSubview:[QXDrifRoomHourRankView shareView]]; [UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ [QXDrifRoomHourRankView shareView].x = 0; } completion:^(BOOL finished) { NSInteger dalayTime = 5; if (weakSelf.model.rank_number == 1) { dalayTime = 5; }else if (weakSelf.model.rank_number == 2){ dalayTime = 4; }else if (weakSelf.model.rank_number == 2){ dalayTime = 3; } [weakSelf performSelector:@selector(dissmissAnimate) afterDelay:dalayTime]; }]; } -(void)dissmissAnimate{ [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ [QXDrifRoomHourRankView shareView].x = -SCREEN_WIDTH; } completion:^(BOOL finished) { [QXDrifRoomHourRankView shareView].x = SCREEN_WIDTH; [[QXDrifRoomHourRankView shareView] removeFromSuperview]; [[QXDrifRoomHourRankView shareView].dataArray removeFirstObject]; [QXDrifRoomHourRankView shareView].isPlaying = NO; if ([QXDrifRoomHourRankView shareView].dataArray.count>0) { [[QXDrifRoomHourRankView shareView] giftAction]; } }]; } -(void)setModel:(QXRoomHourDriftModel *)model{ _model = model; NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:model.text]; switch (model.rank_number) { case QXDrifRoomHourRankTypeFirst:{ self.bgImageView.image = [UIImage imageNamed:@"room_hour_rank_drif_first"]; if ([model.room_name isExist]) { [attr yy_setColor:RGB16(0xFFFA63) range:[model.text rangeOfString:model.room_name]]; } } break; case QXDrifRoomHourRankTypeSecond:{ self.bgImageView.image = [UIImage imageNamed:@"room_hour_rank_drif_second"]; if ([model.room_name isExist]) { [attr yy_setColor:RGB16(0xFEFE20) range:[model.text rangeOfString:model.room_name]]; } } break; case QXDrifRoomHourRankTypeThird:{ self.bgImageView.image = [UIImage imageNamed:@"room_hour_rank_drif_third"]; if ([model.room_name isExist]) { [attr yy_setColor:RGB16(0x1FFFE5) range:[model.text rangeOfString:model.room_name]]; } } break; default: break; } self.titleLabel.attributedText = attr; } -(void)drifPopIsClose:(BOOL)isClose{ _isClose = isClose; self.hidden = self.isClose; [[NSUserDefaults standardUserDefaults] setBool:isClose forKey:kIsCloseDrifPop]; [[NSUserDefaults standardUserDefaults] synchronize]; if (isClose) { [QXDrifRoomHourRankView shareView].x = SCREEN_WIDTH; [[QXDrifRoomHourRankView shareView] removeFromSuperview]; [[QXDrifRoomHourRankView shareView].dataArray removeAllObjects]; [QXDrifRoomHourRankView shareView].isPlaying = NO; } } -(NSMutableArray *)dataArray{ if (!_dataArray) { _dataArray = [NSMutableArray array]; } return _dataArray; } @end @implementation QXRoomHourDriftModel @end