// // XPRoomFunctionContainerView.m // xplan-ios // // Created by 冯硕 on 2021/12/15. // #import "XPRoomFunctionContainerView.h" ///Third #import #import #import #import ///Tool #import "XPMacro.h" #import "AccountInfoStorage.h" #import "UIImage+Utils.h" #import "ThemeColor.h" #import "TTPopup.h" #import "Api+Room.h" #import "XCHudTool.h" #import "XPHtmlUrl.h" #import "Api+Mine.h" #import "ClientConfig.h" #import "XCCurrentVCStackManager.h" #import "XPConstant.h" #import "Api+RoomSetting.h" #import "RtcManager.h" #import "XPRoomMiniManager.h" #import "Api+RoomPK.h" #import "Api+Room.h" #import "Api+WishGift.h" #import "StatisticsServiceHelper.h" ///Model #import "RoomInfoModel.h" #import "MicroQueueModel.h" #import "UserInfoModel.h" #import "AttachmentModel.h" #import "GiftValueInfoModel.h" #import "AcrossRoomPKPanelModel.h" #import "LittleGameInfoModel.h" #import "XPAnchorFansRelationModel.h" #import "XPAnchorFansJoinModel.h" #import "XPAnchorFansTaskModel.h" #import "AcrossRoomPKPanelModel.h" #import "RoomPKDetailInfoModel.h" #import "RoomPKChooseUserModel.h" #import "GiftReceiveInfoModel.h" #import "GiftInfoModel.h" #import "RoomPKTeamModel.h" #import "RoomNewUserGreetModel.h" #import "WishGiftInfoModel.h" ///View #import "XPRoomHalfWebView.h" #import "XPAnchorAudienceUpMicView.h" #import "XPRoomAnchorInfoCardView.h" #import "XPRoomTopicViewController.h" #import "XPRoomTopicAlertView.h" #import "XPAcrossRoomPKInviteView.h" #import "XPAcrossRoomPKInviteResultView.h" #import "XPAcrpssRoomPKPanelView.h" #import "XPAcrossRoomPKResultView.h" #import "XPAcrossRoomPKForceEndResultView.h" #import "XPAnchorPKInviteView.h" #import "XPAnchorPKResultView.h" #import "XPAnchorPKFinishView.h" #import "XPSendGiftView.h" #import "XPUserCardViewController.h" #import "XPRoomViewController.h" #import "XPLittleGameMiniStageView.h" #import "XPLittleGameRoomListView.h" #import "AcrossRoomPKPrizeModel.h" #import "XPRoomTrumpetView.h" #import "XPMineUserInfoViewController.h" #import "XPRoomRankEntranceView.h" #import "XPRoomAnchorRankEnterView.h" #import "XPRoomBackMusicPlayerView.h" #import "XPRoomNewUserGreetView.h" #import "XPRoomHalfMessageView.h" #import "XPAcrossRoomPKCountDownView.h" #import "XPNewUserRoomGiftView.h" #import "XPWishGiftViewController.h" #import "XPWishGiftEnterView.h" ///个播PK #import "XPAnchorFansTeamEntranceView.h" #import "XPAnchorFansTeamViewController.h" #import "XPAnchorFansTaskViewController.h" #import "XPAnchorPkPanelView.h" #import "XPWebViewController.h" #import "XPRoomPKProgressView.h" @interface XPRoomFunctionContainerView () ///host 代理 @property (nonatomic,weak) iddelegate; ///房间榜 @property (nonatomic,strong) XPRoomRankEntranceView *contributeEnterView; ///相亲阶段的按钮 @property (nonatomic,strong) UIButton *datingProgresButton; ///关注个播房主倒计时 @property (nonatomic, strong) dispatch_source_t followAnchorTimer; ///个播粉丝团入口 @property (nonatomic, strong) XPAnchorFansTeamEntranceView *fansTeamEntranceView; ///个播小时榜入口按钮 @property (nonatomic, strong) XPRoomAnchorRankEnterView *hourRankEntranceView; ///话题的容器 @property (nonatomic,strong) UIStackView *topicStackView; ///话题 @property (nonatomic,strong) UILabel *topicLabel; ///编辑 @property (nonatomic,strong) UIButton *editButton; ///跨房pk的面板 @property (nonatomic,strong) XPAcrpssRoomPKPanelView *acrossPKPanelView; ///跨房PK预约倒计时 @property (nonatomic, strong) XPAcrossRoomPKCountDownView *acrossPKCountView; ///小游戏 最小化的坑位 @property (nonatomic,strong) XPLittleGameMiniStageView *littleGameMiniView; ///显示游戏的切换 @property (nonatomic,strong) XPLittleGameRoomListView *gameListView; ///粉丝团数据 @property (nonatomic, strong) XPAnchorFansRelationModel *relationFansModel; ///个播PK面板 @property (nonatomic, strong) XPAnchorPkPanelView *anchorPKPanelView; ///小喇叭 @property (nonatomic, strong) XPRoomTrumpetView *trumpetView; ///小喇叭队列 @property (nonatomic, strong) NSMutableArray *trumpetQueue; ///小喇叭动画定时器 @property (nonatomic, strong) dispatch_source_t trumpetTimer; ///播放器的入口 @property (nonatomic,strong) UIButton *musicEnterButton; ///播放器 @property (nonatomic,strong) XPRoomBackMusicPlayerView *musicPlayView; ///房间PKview @property (nonatomic,strong) XPRoomPKProgressView *roompkPanelView; ///pk详情 @property (nonatomic,strong) RoomPKDetailInfoModel *pkDetailInfo; ///是否正在加载打招呼 @property (nonatomic,assign) BOOL isLoadGreet; ///获取新用户礼物倒计时3s @property (nonatomic, strong) dispatch_source_t userGiftTimer; ///许愿礼物 @property (nonatomic,strong) XPWishGiftEnterView *wishGiftView; @end @implementation XPRoomFunctionContainerView - (void)dealloc { if (self.followAnchorTimer != nil) { dispatch_source_cancel(self.followAnchorTimer); } if (self.trumpetTimer != nil) { dispatch_source_cancel(self.trumpetTimer); } if (self.userGiftTimer != nil) { dispatch_source_cancel(self.userGiftTimer); } } - (instancetype)initWithdelegate:(id)delegate { self = [super init]; if (self) { self.delegate = delegate; [self initSubViews]; [self initSubViewConstraints]; } return self; } - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { for (NSInteger i = (self.subviews.count - 1) ; i >= 0 ; i--) { UIView * subView = [self.subviews objectAtIndex:i]; CGPoint convertPoint = [subView convertPoint:point fromView:self]; if (CGRectContainsPoint(subView.bounds, convertPoint)) { return [subView hitTest:convertPoint withEvent:event]; } } for (NSInteger i = (self.subviews.count - 1) ; i >= 0 ; i--) { UIView * subView = [self.subviews objectAtIndex:i]; if (self.musicPlayView.superview && self.musicEnterButton.hidden == YES && ![subView isEqual:self.musicPlayView]) { [UIView animateWithDuration:0.2 animations:^{ self.musicEnterButton.hidden = NO; } completion:nil]; POPBasicAnimation *moveAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter]; moveAnimation.fromValue = [NSValue valueWithCGPoint:self.musicPlayView.center]; moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(-KScreenWidth, self.musicPlayView.center.y)]; moveAnimation.beginTime = CACurrentMediaTime(); moveAnimation.duration = 0.5; moveAnimation.repeatCount = 1; moveAnimation.removedOnCompletion = YES; [self.musicPlayView pop_addAnimation:moveAnimation forKey:@"moveOutAnimation"]; break; } } return nil; } #pragma mark - Public Method - (void)hiddenSudGamePostionView { if (self.delegate.getRoomInfo.mgMicNum > 6) { return; } [self.littleGameMiniView hiddenSudGamePostionView]; } - (Music *)getCurrentMusic { return self.musicPlayView.currentMusic; } - (BOOL)isPlaying { return self.musicPlayView.isPlaying; } - (NSArray *)getRoomPKGroupTeamList { NSArray * redArray = @[]; if (self.roompkPanelView.redChooseArray > 0) { redArray = self.roompkPanelView.redChooseArray; } NSArray * blueArray = @[]; if (self.roompkPanelView.blueChooseArray > 0) { blueArray = self.roompkPanelView.blueChooseArray; } return @[redArray, blueArray]; } ///房间内PK是否正在进行 - (BOOL)isRoomPKPlaying { return [self.roompkPanelView isRoomPKPlaying]; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.contributeEnterView]; [self addSubview:self.topicStackView]; [self.topicStackView addArrangedSubview:self.topicLabel]; [self.topicStackView addArrangedSubview:self.editButton]; } - (void)initSubViewConstraints { [self.contributeEnterView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(12); make.top.mas_equalTo(kNavigationHeight+4); make.width.mas_equalTo(99); make.height.mas_equalTo(24); }]; [self.topicStackView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self); make.height.mas_equalTo(15); make.top.mas_equalTo(50 + 5 + 6 + 12 + 3 + kNavigationHeight); }]; } - (void)showLittleGameMiniView:(RoomType)type micCount:(NSInteger)micCount { if (type == RoomType_MiniGame) { if (!self.littleGameMiniView.superview) { [self addSubview:self.littleGameMiniView]; [self.littleGameMiniView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(0); make.top.mas_equalTo(kNavigationHeight); make.height.mas_equalTo(23); }]; } self.littleGameMiniView.micCount = micCount; if (micCount > 6) { [self.littleGameMiniView removeFromSuperview]; } } else { if (self.littleGameMiniView.superview) { [self.littleGameMiniView removeFromSuperview]; } } } - (void)configLittleGameState { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; if (roomInfo.isPermitRoom != PermitRoomType_Licnese && roomInfo.roomModeType != RoomModeType_Open_Blind && roomInfo.roomModeType != RoomModeType_Open_PK_Mode && roomInfo.roomModeType != RoomModeType_Open_AcrossRoomPK_mode && roomInfo.roomModeType != RoomModeType_Open_Micro_Mode && !roomInfo.leaveMode && roomInfo.uid == [AccountInfoStorage instance].getUid.integerValue) { if (!self.gameListView.superview) { [self addSubview:self.gameListView]; [self.gameListView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(self).offset(-85); make.top.mas_equalTo(self).offset(kNavigationHeight - 14 - 11 - 19.0 / 2.0); }]; } self.gameListView.mgId = roomInfo.mgId > 0 ? [NSString stringWithFormat:@"%lld", roomInfo.mgId] : @"0"; } else { if (self.gameListView.superview) { [self.gameListView removeFromSuperview]; } } } //自己是否在游戏中 - (BOOL)isInSudGame { BOOL isGamePlaying = NO; if (self.delegate.getRoomInfo.type == RoomType_MiniGame) { for (int i = -1; i<5; i++) { NSMutableDictionary * micQueue = self.delegate.getMicroQueue; MicroQueueModel *micSequence = [micQueue objectForKey:[NSString stringWithFormat:@"%d", i]]; if (micSequence == nil || micSequence.userInfo == nil) { continue; } if (micSequence.userInfo.uid == [AccountInfoStorage instance].getUid.integerValue && micSequence.userInfo.gameStatus == LittleGamePlayStatus_Plying) { isGamePlaying = YES; break; } } } return isGamePlaying; } ///当前房间是否在游戏中 - (BOOL)currentRoomIsInSudGame { BOOL isGamePlaying = NO; if (self.delegate.getRoomInfo.type == RoomType_MiniGame) { for (int i = -1; i<5; i++) { NSMutableDictionary * micQueue = self.delegate.getMicroQueue; MicroQueueModel *micSequence = [micQueue objectForKey:[NSString stringWithFormat:@"%d", i]]; if (micSequence == nil || micSequence.userInfo == nil) { continue; } if (micSequence.userInfo.gameStatus == LittleGamePlayStatus_Plying) { isGamePlaying = YES; break; } } } return isGamePlaying; } #pragma mark - 新用户打招呼动画 - (void)handleNewUserGreet { if (self.delegate.getUserInfo.fromType == UserEnterRoomFromType_New_User_Greet && !self.isLoadGreet) { self.isLoadGreet = YES; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSString * roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; [Api newUserStartGreet:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { RoomNewUserGreetModel * info = [RoomNewUserGreetModel modelWithDictionary:data.data]; if (info.roomPopup) { XPRoomNewUserGreetView * greetView = [[XPRoomNewUserGreetView alloc] initWithFrame:CGRectMake(KScreenWidth, kSafeAreaTopHeight + 52, KScreenWidth, 80)]; greetView.delegate = self; greetView.sayHelloUserAvatarList = info.sayHelloUserAvatarList; [self addSubview:greetView]; [UIView animateWithDuration:.35 animations:^{ CGRect rect = greetView.frame; rect.origin.x = 0; greetView.frame = rect; } completion:nil]; } } } roomUid:roomUid]; }); } } - (void)xPRoomNewUserGreetView:(XPRoomNewUserGreetView *)view didClickCheckout:(UIButton *)sender { UIViewController * controller = (UIViewController *)self.delegate; XPRoomHalfMessageView *halfMessageView = [[XPRoomHalfMessageView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight) controller:controller]; [controller.view addSubview:halfMessageView]; [UIView animateWithDuration:.35 animations:^{ CGRect rect = halfMessageView.frame; rect.origin.y = 0; halfMessageView.frame = rect; }]; } #pragma mark - 新用户房间礼物 - (void)handleNewUserRoomGift { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; BOOL hadShow = [defaults boolForKey:kHadShowNewUserGiftKey]; if (!hadShow && self.delegate.getUserInfo.uid != self.delegate.getRoomInfo.uid) { if (self.userGiftTimer != nil) { dispatch_source_cancel(self.userGiftTimer); } NSInteger totalTime = 3; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); self.userGiftTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); dispatch_source_set_timer(self.userGiftTimer,dispatch_walltime(NULL, totalTime*NSEC_PER_SEC), totalTime*NSEC_PER_SEC, 0); //每秒执行 @weakify(self); dispatch_source_set_event_handler(self.userGiftTimer, ^{ dispatch_async(dispatch_get_main_queue(), ^{ @strongify(self); if (self.userGiftTimer != nil) { dispatch_source_cancel(self.userGiftTimer); self.userGiftTimer = nil; } [Api requestNewUserInRoomGift:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { if (data.data != nil) { GiftInfoModel *giftInfo = [GiftInfoModel modelWithJSON:data.data]; XPNewUserRoomGiftView *view = [[XPNewUserRoomGiftView alloc] init]; view.giftInfo = giftInfo; [TTPopup popupView:view style:TTPopupStyleAlert]; [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventRoomNugivePopShow]; } [defaults setBool:YES forKey:kHadShowNewUserGiftKey]; [defaults synchronize]; } } roomUid:[NSString stringWithFormat:@"%zd", self.delegate.getRoomInfo.uid]]; }); }); dispatch_resume(self.userGiftTimer); } } #pragma mark - 房间PK - (void)configRoomPKPanelView:(BOOL)isEnter { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode) { self.roompkPanelView.roomInfo = roomInfo; if (!self.roompkPanelView.superview) { [self addSubview:self.roompkPanelView]; [self.roompkPanelView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self).offset(15); make.top.mas_equalTo(self).offset(35 + (58 + 5 + 6 + 12) + 38 + (55 + 10 + 12 + 5+16) * 2 + 15 * 2 + kNavigationHeight + 5); }]; } NSString * roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; NSString * uid = [AccountInfoStorage instance].getUid; NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = roomId; request.userIds = @[uid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = members.firstObject; if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) { self.roompkPanelView.isManager = YES; }else { self.roompkPanelView.isManager = NO; } if (isEnter) { [self.roompkPanelView enterRoomGetRoomPKDetailInfo]; } } }]; } else { if (self.roompkPanelView.superview) { [self.roompkPanelView removeFromSuperview]; } } } #pragma mark - RoomGuestDelegate - (void)onRoomChange { if (self.followAnchorTimer != nil) { dispatch_source_cancel(self.followAnchorTimer); } if (self.trumpetTimer != nil) { dispatch_source_cancel(self.trumpetTimer); } if (self.userGiftTimer != nil) { dispatch_source_cancel(self.userGiftTimer); } } - (void)onRoomUpdate { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; MicroQueueModel * model = [self.delegate.getMicroQueue objectForKey:@"-1"]; if (roomInfo.roomModeType == RoomModeType_Open_Blind && model.userInfo && model.userInfo.uid == [AccountInfoStorage instance].getUid.integerValue) { if (!self.datingProgresButton.superview) { [self addSubview:self.datingProgresButton]; [self.datingProgresButton mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(70, 30)); make.centerX.mas_equalTo(self); make.top.mas_equalTo(self).offset(354 + kSafeAreaTopHeight + 35); }]; } switch (roomInfo.blindDateState) { case RoomPlayDateingType_Talk: [self.datingProgresButton setTitle:@"开始选择>" forState:UIControlStateNormal]; break; case RoomPlayDateingType_Pick: [self.datingProgresButton setTitle:@"公布心动>" forState:UIControlStateNormal]; break; case RoomPlayDateingType_Result: [self.datingProgresButton setTitle:@"结束本轮>" forState:UIControlStateNormal]; break; case RoomPlayDateingType_Finish: [self.datingProgresButton setTitle:@"嘉宾交流>" forState:UIControlStateNormal]; break; default: break; } } else { if (self.datingProgresButton.superview) { [self.datingProgresButton removeFromSuperview]; } } [self updateHourRankEntrance]; if (roomInfo.type == RoomType_Anchor) { self.contributeEnterView.title = @"主播榜"; if (roomInfo.hadChangeRoomType) { ///切换房间类型初始化当前用户与房间粉丝团关系 [Api requestInRoomFansTeam:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { XPAnchorFansRelationModel *model = [XPAnchorFansRelationModel modelWithJSON:data.data]; [self updateFansTeamEntranceView:model]; } teamUid:[NSString stringWithFormat:@"%ld", roomInfo.uid]]; [self updateContrionEntranceWithRoomUid:[NSString stringWithFormat:@"%ld", roomInfo.uid] type:@"month"]; } } else { self.contributeEnterView.title = @"房间榜"; [self.fansTeamEntranceView removeFromSuperview]; if (roomInfo.hadChangeRoomType) { [self updateContrionEntranceWithRoomUid:[NSString stringWithFormat:@"%ld", roomInfo.uid] type:@"day"]; } } [self updateRoomTopic]; [self showLittleGameMiniView:roomInfo.type micCount:roomInfo.mgMicNum]; [self configLittleGameState]; [self configPlayMusicRoomTypeChange]; [self configRoomPKPanelView:NO]; } - (void)onRoomEntered { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; NSString * roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid]; [self updateHourRankEntrance]; if (roomInfo.type == RoomType_Anchor) {//个播房 self.contributeEnterView.title = @"主播榜"; ///进房初始化当前用户与房间粉丝团关系 [Api requestInRoomFansTeam:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { XPAnchorFansRelationModel *model = [XPAnchorFansRelationModel modelWithJSON:data.data]; [self updateFansTeamEntranceView:model]; } teamUid:roomUid]; [self updateContrionEntranceWithRoomUid:roomUid type:@"month"];//获取房间榜前三名 } else { self.contributeEnterView.title = @"房间榜"; [self updateContrionEntranceWithRoomUid:roomUid type:@"day"];//获取房间榜前三名 } if (![[AccountInfoStorage instance].getUid isEqualToString:roomUid]) {//非房主 NSString * uid = [[AccountInfoStorage instance] getUid]; [Api attentionStatusCompletion:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {//是否关注了房主 BOOL isLike = ((NSNumber *)data.data).boolValue; if (!isLike && !roomInfo.isRoomFans) { [self setFollowAnchorTimer]; } } uid:uid isLikeUid:roomUid]; } if (roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode) { [Api getAcrossRoomPKDetail:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { AcrossRoomPKPanelModel * acrossPKPanelInfo = [AcrossRoomPKPanelModel modelWithJSON:data.data]; [self updateAnchorPkInfo:acrossPKPanelInfo]; if (acrossPKPanelInfo.pkType == AcrossRoomPkTypeAnchor) { if (acrossPKPanelInfo.aUid.integerValue > 0) { if (!self.anchorPKPanelView.superview) { [self addSubview:self.anchorPKPanelView]; [self.anchorPKPanelView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self); make.top.mas_equalTo(kNavigationHeight + 87); }]; } self.anchorPKPanelView.pkPanelInfo = acrossPKPanelInfo; } } else { AcrossRoomPKPanelModel * acrossPKPanelInfo = [AcrossRoomPKPanelModel modelWithJSON:data.data]; if (acrossPKPanelInfo.aUid.integerValue > 0) { if (!self.acrossPKPanelView.superview) { [self addSubview:self.acrossPKPanelView]; [self.acrossPKPanelView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self); make.top.mas_equalTo(self).offset(354 + kSafeAreaTopHeight); }]; } self.acrossPKPanelView.pkPanelInfo = acrossPKPanelInfo; } } } else { [XCHUDTool showErrorWithMessage:msg]; } } roomUid:roomUid]; } if (roomInfo.showPkBeginTime && roomInfo.roomModeType != RoomModeType_Open_AcrossRoomPK_mode) {//显示PK倒计时 if (!self.acrossPKCountView.superview) { [self addSubview:self.acrossPKCountView]; self.acrossPKCountView.startTime = roomInfo.pkBeginTime; [self.acrossPKCountView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(0); make.top.mas_equalTo(self.contributeEnterView.mas_bottom).mas_offset(4); make.size.mas_equalTo(CGSizeMake(52, 52)); }]; [UIView animateWithDuration:0.5 animations:^{ CGRect frame = self.acrossPKCountView.frame; frame.origin.x = KScreenWidth-frame.size.width; self.acrossPKCountView.frame = frame; }]; } } [self updateRoomTopic]; [self showLittleGameMiniView:roomInfo.type micCount:roomInfo.mgMicNum]; [self configLittleGameState]; [self configRoomPKPanelView:YES]; [self handleNewUserGreet]; ///新用户房间礼物 [self handleNewUserRoomGift]; ///房间心愿礼物 [self configWishGiftEnter]; } - (void)onRoomMiniEntered { if ([XPRoomMiniManager shareManager].getCurrentMusic) { if (!self.musicPlayView.superview) { [self addSubview:self.musicPlayView]; self.musicPlayView.frame = CGRectMake(-KScreenWidth, kNavigationHeight + 4, KScreenWidth - 85, 80); } [self.musicPlayView configCurrentPlayingMusic:[XPRoomMiniManager shareManager].getCurrentMusic isPlaying:[XPRoomMiniManager shareManager].musicPlaying]; [[XPRoomMiniManager shareManager] configCurrentMusic:nil isPlaying:NO]; } } - (void)handleNIMCustomMessage:(NIMMessage *)message { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { AttachmentModel *attachment = (AttachmentModel *)obj.attachment; if (attachment.first == CustomMessageType_AnchorRoom_AudienceUpMic) { [self showAskForUpMic:attachment.data]; } else if(attachment.first == CustomMessageType_Gift && (attachment.second == Custom_Message_Sub_Gift_Send || attachment.second == Custom_Message_Sub_Gift_LuckySend || attachment.second == Custom_Message_Sub_Gift_ChannelNotify)) { if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode) { [self.roompkPanelView roomPKReceiveGift:attachment]; } }else if(attachment.first == CustomMessageType_AllMicroSend && (attachment.second == Custom_Message_Sub_AllMicroSend || attachment.second == Custom_Message_Sub_AllBatchSend || attachment.second == Custom_Message_Sub_AllMicroLuckySend || attachment.second == Custom_Message_Sub_AllBatchMicroLuckySend)) { if (roomInfo.roomModeType == RoomModeType_Open_PK_Mode) { [self.roompkPanelView roomPKReceiveGift:attachment]; } } else if(attachment.first == CustomMessageType_Room_PK) { [self.roompkPanelView handleRoomPKCustomMessage:attachment]; } else if (attachment.first == CustomMessageType_Across_Room_PK) { ///自己是公会超管 BOOL meIsSuperAdmin = NO; for (GuildSuperAdminInfoModel *managerInfo in self.delegate.getRoomSuperAdminList) { if ([managerInfo.uid isEqualToString:[AccountInfoStorage instance].getUid]) { meIsSuperAdmin = YES; break; } } switch (attachment.second) { case Custom_Message_Sub_AcrossRoomPK_Invite: { [self.acrossPKCountView removeFromSuperview]; self.acrossPKCountView = nil; NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = [members firstObject]; if (member.type == NIMChatroomMemberTypeCreator || meIsSuperAdmin) { XPAcrossRoomPKInviteView * inviteView = [[XPAcrossRoomPKInviteView alloc] init]; inviteView.roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; inviteView.dataDic = attachment.data; [self addSubview:inviteView]; [inviteView mas_makeConstraints:^(MASConstraintMaker *make) { make.center.mas_equalTo(self); }]; } } }]; } break; case Custom_Message_Sub_AcrossRoomPK_Accept: { [self.acrossPKCountView removeFromSuperview]; self.acrossPKCountView = nil; NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = [members firstObject]; if (member.type == NIMChatroomMemberTypeCreator || meIsSuperAdmin) { XPAcrossRoomPKInviteResultView * inviteResutView = [[XPAcrossRoomPKInviteResultView alloc] init]; inviteResutView.isAccept = YES; [self addSubview:inviteResutView]; [inviteResutView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self).offset(114 + kSafeAreaTopHeight); make.centerX.mas_equalTo(self); make.size.mas_equalTo(CGSizeMake(281, 42)); }]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [inviteResutView removeFromSuperview]; }); } } }]; } break; case Custom_Message_Sub_AcrossRoomPK_Reject: { [self.acrossPKCountView removeFromSuperview]; self.acrossPKCountView = nil; NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = [members firstObject]; if (member.type == NIMChatroomMemberTypeCreator || meIsSuperAdmin) { XPAcrossRoomPKInviteResultView * inviteResutView = [[XPAcrossRoomPKInviteResultView alloc] init]; inviteResutView.isAccept = NO; [self addSubview:inviteResutView]; [inviteResutView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self).offset(114 + kSafeAreaTopHeight); make.centerX.mas_equalTo(self); make.size.mas_equalTo(CGSizeMake(201, 42)); }]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [inviteResutView removeFromSuperview]; }); } } }]; } break; case Custom_Message_Sub_AcrossRoomPK_Panel: { [self.acrossPKCountView removeFromSuperview]; self.acrossPKCountView = nil; if (!self.acrossPKPanelView.superview) { [self addSubview:self.acrossPKPanelView]; [self.acrossPKPanelView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self).offset(354 + kSafeAreaTopHeight); make.centerX.mas_equalTo(self); }]; } AcrossRoomPKPanelModel * acrossPKPanelInfo = [AcrossRoomPKPanelModel modelWithJSON:attachment.data]; self.acrossPKPanelView.pkPanelInfo = acrossPKPanelInfo; } break; case Custom_Message_Sub_AcrossRoomPK_End: { [self.acrossPKCountView removeFromSuperview]; self.acrossPKCountView = nil; [self.acrossPKPanelView resetAcrossPKViewData]; [self.acrossPKPanelView removeFromSuperview]; AcrossRoomPKPanelModel * model = [AcrossRoomPKPanelModel modelWithJSON:attachment.data]; if (model.isForce) { XPAcrossRoomPKForceEndResultView *view = [[XPAcrossRoomPKForceEndResultView alloc] initWithFrame:CGRectMake(0, 0, 281, 208)]; view.data = model; [TTPopup popupView:view style:TTPopupStyleAlert]; } else { XPAcrossRoomPKResultView *view = [[XPAcrossRoomPKResultView alloc] initWithFrame:CGRectMake(0, 0, 320, 453)]; view.data = model; [TTPopup popupView:view style:TTPopupStyleAlert]; } } break; ///个播跨房PK case Custom_Message_Sub_AnchorPK_Invite://收到个播PK邀请 { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = [members firstObject]; if (member.type == NIMTeamMemberTypeOwner) { XPAnchorPKInviteView * inviteView = [[XPAnchorPKInviteView alloc] init]; inviteView.roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; inviteView.dataDic = attachment.data; [TTPopup popupView:inviteView style:TTPopupStyleAlert]; } } }]; } break; case Custom_Message_Sub_AnchorPK_Accept://对方接受个播PK邀请 { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = [members firstObject]; if (member.type == NIMTeamMemberTypeOwner) { XPAcrossRoomPKInviteResultView * inviteResutView = [[XPAcrossRoomPKInviteResultView alloc] init]; inviteResutView.isAccept = YES; [self addSubview:inviteResutView]; [inviteResutView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self).offset(114 + kSafeAreaTopHeight); make.centerX.mas_equalTo(self); make.size.mas_equalTo(CGSizeMake(281, 42)); }]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [inviteResutView removeFromSuperview]; }); AcrossRoomPKPanelModel * acrossPKPanelInfo = [AcrossRoomPKPanelModel modelWithJSON:attachment.data]; [[RtcManager instance] connectOtherRoom:acrossPKPanelInfo.aRoomId userId:acrossPKPanelInfo.aUid]; [self updateAnchorPkInfo:acrossPKPanelInfo]; } } }]; } break; case Custom_Message_Sub_AnchorPK_Reject://对方拒绝个播PK邀请 { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = [members firstObject]; if (member.type == NIMTeamMemberTypeOwner) { XPAcrossRoomPKInviteResultView * inviteResutView = [[XPAcrossRoomPKInviteResultView alloc] init]; inviteResutView.isAccept = NO; [self addSubview:inviteResutView]; [inviteResutView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self).offset(114 + kSafeAreaTopHeight); make.centerX.mas_equalTo(self); make.size.mas_equalTo(CGSizeMake(201, 42)); }]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [inviteResutView removeFromSuperview]; }); } } }]; } break; case Custom_Message_Sub_AnchorPK_Panel://个播PK面板消息 { if (!self.anchorPKPanelView.superview) { [self addSubview:self.anchorPKPanelView]; [self.anchorPKPanelView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self); make.top.mas_equalTo(kNavigationHeight + 87); }]; } AcrossRoomPKPanelModel * acrossPKPanelInfo = [AcrossRoomPKPanelModel modelWithJSON:attachment.data]; self.anchorPKPanelView.pkPanelInfo = acrossPKPanelInfo; [self updateAnchorPkInfo:acrossPKPanelInfo]; } break; case Custom_Message_Sub_AnchorPK_End://个播PK结束,进入惩罚阶段 { if (!self.anchorPKPanelView.superview) { [self addSubview:self.anchorPKPanelView]; [self.anchorPKPanelView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self); make.top.mas_equalTo(kNavigationHeight + 87); }]; } AcrossRoomPKPanelModel * acrossPKPanelInfo = [AcrossRoomPKPanelModel modelWithJSON:attachment.data]; self.anchorPKPanelView.pkPanelInfo = acrossPKPanelInfo; [self updateAnchorPkInfo:acrossPKPanelInfo]; if (acrossPKPanelInfo.isForce) { XPAnchorPKFinishView *view = [[XPAnchorPKFinishView alloc] init]; view.data = acrossPKPanelInfo; [TTPopup popupView:view style:TTPopupStyleAlert]; } else { XPAnchorPKResultView *view = [[XPAnchorPKResultView alloc] initWithFrame:CGRectMake(0, 0, 300, 472)]; view.data = acrossPKPanelInfo; [TTPopup popupView:view style:TTPopupStyleAlert]; } } break; case Custom_Message_Sub_AnchorPK_Finish://个播PK完成 { [self.anchorPKPanelView resetAcrossPKViewData]; [self.anchorPKPanelView removeFromSuperview]; self.anchorPKPanelView = nil; [self resetAnchorPkInfo]; [[RtcManager instance] disconnectOtherRoom]; } break; case Custom_Message_Sub_PK_BeginTime:{ long long time = [attachment.data[@"beginTime"] longLongValue]; [self showAcrossPkCountDownViewWithTime:time]; } break; default: break; } } else if (attachment.first == CustomMessageType_Anchor_FansTeam) { [self handleAnchorFansTeam:attachment]; } else if (attachment.first == CustomMessageType_Noble_VIP && attachment.second == Custom_Message_Sub_Room_Trumpet) { [self handleTrumpet:attachment]; } } } - (void)handleNIMNotificationMessage:(NIMMessage *)message { NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject; NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content; switch (content.eventType) { case NIMChatroomEventTypeAddManager: { for (NIMChatroomNotificationMember * member in content.targets) { if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) { self.editButton.hidden = NO; self.roompkPanelView.isManager = YES; break; } } } break; case NIMChatroomEventTypeRemoveManager: { for (NIMChatroomNotificationMember * member in content.targets) { if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) { self.editButton.hidden = YES; self.roompkPanelView.isManager = NO; break; } } } break; default: break; } } - (void)onMicroQueueUpdate:(NSMutableDictionary *)queue { if (self.delegate.getRoomInfo.type == RoomType_MiniGame) { [self.littleGameMiniView needRefreshPosition:queue]; } else if(self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) { self.roompkPanelView.micQueue = queue; }else { MicroQueueModel * currentUserModel; NSString * uid = [AccountInfoStorage instance].getUid; for (MicroQueueModel * microModel in queue.allValues) { if (microModel.userInfo && microModel.userInfo.uid == uid.integerValue) { currentUserModel = microModel; } } if (currentUserModel) { if (!self.musicEnterButton.superview) { [self addSubview:self.musicEnterButton]; CGFloat topOffY = self.delegate.getRoomInfo.type == RoomType_Anchor || self.delegate.getRoomInfo.isPermitRoom == PermitRoomType_Licnese ? (kNavigationHeight+ 4 + 22 + 18) : (kNavigationHeight+ 4); if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind) {//相亲厅播放音乐 [self.musicEnterButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(16); make.centerY.mas_equalTo(self.contributeEnterView); make.width.mas_equalTo(22); make.height.mas_equalTo(22); }]; } else { if (self.hourRankEntranceView.superview) { [self.musicEnterButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.hourRankEntranceView.mas_right).mas_offset(4); make.centerY.mas_equalTo(self.contributeEnterView); make.width.mas_equalTo(22); make.height.mas_equalTo(22); }]; } else { [self.musicEnterButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(16); make.centerY.mas_equalTo(self.contributeEnterView); make.width.mas_equalTo(22); make.height.mas_equalTo(22); }]; } } } } else { [[RtcManager instance] changePlayState:BackMusicPlayState_Stop]; if (self.musicEnterButton) { [self.musicEnterButton removeFromSuperview]; } POPBasicAnimation *moveAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter]; moveAnimation.fromValue = [NSValue valueWithCGPoint:self.musicPlayView.center]; moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(-KScreenWidth, self.musicPlayView.center.y)]; moveAnimation.beginTime = CACurrentMediaTime(); moveAnimation.duration = 0.5; moveAnimation.repeatCount = 1; moveAnimation.removedOnCompletion = YES; [self.musicPlayView pop_addAnimation:moveAnimation forKey:@"moveOutAnimation"]; [self.musicPlayView resetData]; [self.musicPlayView removeFromSuperview]; } } } #pragma mark - XPAcrpssRoomPKPanelViewDelegate - (void)xPAcrpssRoomPKPanelView:(XPAcrpssRoomPKPanelView *)view onlookRoom:(NSString *)roomUid { [self.delegate exitRoom]; ///这个为啥加个延迟的 因为会先退房 有一个dismiss的动画 所以加个延迟吧 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [XPRoomViewController openRoom:roomUid viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; }); } - (void)xPAcrpssRoomPKPanelView:(XPAcrpssRoomPKPanelView *)view sendGiftToUser:(NSString *)uid { NSString * roomUid = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].uid]; XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid]; giftView.delegate = self.delegate; NSArray * giftUses = [self configGiftUsers:[self.delegate getMicroQueue]]; [giftView configGiftUsers:giftUses]; [self.delegate.getCurrentNav presentViewController:giftView animated:YES completion:nil]; } - (NSArray *)configGiftUsers:(NSMutableDictionary *)queue { NSMutableArray * array = [NSMutableArray array]; for (MicroQueueModel * microModel in queue.allValues) { if (microModel.userInfo && microModel.userInfo.uid >0) { UserInfoModel * userInfo = microModel.userInfo; XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init]; userModel.avatar = userInfo.avatar; userModel.position = [NSString stringWithFormat:@"%d", microModel.microState.position]; userModel.uid = userInfo.uid; [array addObject:userModel]; } } if (self.delegate.getRoomInfo.leaveMode) { RoomInfoModel * roomInfo= self.delegate.getRoomInfo; XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init]; userModel.avatar = roomInfo.avatar; userModel.position = @"-1"; userModel.uid = roomInfo.uid; [array addObject:userModel]; } return array; } - (void)xPAcrpssRoomPKPanelView:(XPAcrpssRoomPKPanelView *)view showUserCard:(NSString *)uid { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; NSString * targetUid = uid; XPUserCardInfoModel * model = [[XPUserCardInfoModel alloc] init]; [[self.delegate.getMicroQueue allValues] enumerateObjectsUsingBlock:^(MicroQueueModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (targetUid.integerValue == obj.userInfo.uid) { model.position = [NSString stringWithFormat:@"%d", obj.microState.position]; model.posState = obj.microState.posState; model.micState = obj.microState.micState; *stop = YES; } }]; model.nick = self.delegate.getUserInfo.nick; model.uid = targetUid; model.delegate = self.delegate; model.roomInfo = roomInfo; model.micQueue = self.delegate.getMicroQueue; model.superMangerList = self.delegate.getRoomSuperAdminList; XPUserCardViewController * userCardVC = [[XPUserCardViewController alloc] initWithUser:model]; [self.delegate.getCurrentNav presentViewController:userCardVC animated:YES completion:nil]; } #pragma mark - XPAnchorPkPanelViewDelegate - (void)xPAnchorPKPanelView:(XPAnchorPkPanelView *)view showUserCard:(NSString *)uid { XPMineUserInfoViewController * userInfoVC = [[XPMineUserInfoViewController alloc] init]; userInfoVC.uid = uid.integerValue; [self.delegate.getCurrentNav pushViewController:userInfoVC animated:YES]; } ///去房间 - (void)xPAnchorPKPanelView:(XPAnchorPkPanelView *)view onlookRoom:(NSString *)roomUid { [self.delegate exitRoom]; ///这个为啥加个延迟的 因为会先退房 有一个dismiss的动画 所以加个延迟吧 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [XPRoomViewController openRoom:roomUid viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; }); } ///关注房主成功 - (void)xPAnchorPKPanelViewAttentionSuccess { if (self.followAnchorTimer != nil) { dispatch_source_cancel(self.followAnchorTimer); self.followAnchorTimer = nil; } } - (void)xPAnchorPKPanelViewPenaltyCountDownEnd { self.delegate.getRoomInfo.pkState = AcrossRoomPkStateTypePenaltyEnd; } #pragma mark - XPRoomBackMusicPlayerViewDelegate - (void)xPRoomBackMusicPlayerView:(XPRoomBackMusicPlayerView *)view musicPlaying:(BOOL)musicPlaying { if (musicPlaying) { [self resumeLayer:self.musicEnterButton.imageView.layer]; } else { [self pauseLayer:self.musicEnterButton.imageView.layer]; } } #pragma mark - Event Response - (void)contributionButtonAction:(UITapGestureRecognizer *)tap { NSString * roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init]; webView.url = [NSString stringWithFormat:@"%@?roomUid=%@", URLWithType(kRoomRankURL), roomUid]; [TTPopup popupView:webView style:TTPopupStyleActionSheet]; if (self.delegate.getRoomInfo.type == RoomType_Anchor) {//点击的时候更新一下 [self updateContrionEntranceWithRoomUid:roomUid type:@"month"]; } else { [self updateContrionEntranceWithRoomUid:roomUid type:@"day"]; } [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_giftlist_click eventAttributes:@{@"roomUid" : roomUid}]; } - (void)onAnchorHourRankButtonAction:(UITapGestureRecognizer *)ges { NSString * roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; NSString * url = self.delegate.getRoomInfo.type == RoomType_Anchor ? URLWithType(kRoomHourRankURL) : URLWithType(kLicenseHourRankURL); XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init]; webView.url = [NSString stringWithFormat:@"%@?roomUid=%@", url, roomUid]; [TTPopup popupView:webView style:TTPopupStyleActionSheet]; [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_ranklist_click eventAttributes:@{@"roomUid" : roomUid}]; } - (void)datingProgresButtonAction:(UIButton *)sender { [TTPopup dismiss]; RoomInfoModel * roomInfo = self.delegate.getRoomInfo; NSString * message = @""; if (roomInfo.blindDateState == RoomPlayDateingType_Talk) { message = @"进入心动选人环节?"; } else if(roomInfo.blindDateState == RoomPlayDateingType_Pick) { message = @"进入心动公布环节?"; } else if(roomInfo.blindDateState == RoomPlayDateingType_Result) { message = @"结束本轮,同时清空魅力值?"; } else if (roomInfo.blindDateState == RoomPlayDateingType_Finish) { message = @"进入嘉宾交流环节?"; } TTAlertConfig * config = [[TTAlertConfig alloc] init]; config.message = message; [TTPopup alertWithConfig:config confirmHandler:^{ NSString * roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; NSString * roundId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.blindDateState]; [Api changeRoomDatingState:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { } else { [XCHUDTool showErrorWithMessage:msg]; } } roomUserId:roomUid roundId:roundId]; } cancelHandler:^{ }]; } - (void)foldButtonAction:(UIButton *)sender { sender.selected = !sender.selected; } - (void)tapFansTeamRecognizer { NSString *roomUid = [NSString stringWithFormat:@"%zd", self.delegate.getRoomInfo.uid]; if (self.relationFansModel.isCurrentRoomAnchor) {///是房主 if (self.relationFansModel.hasFansTeamCurrentRoom) { XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init]; webView.url = [NSString stringWithFormat:@"%@?roomUid=%@", URLWithType(kAnchorFansListURL), roomUid]; [TTPopup popupView:webView style:TTPopupStyleActionSheet]; } else { XPWebViewController * webVC =[[XPWebViewController alloc] init]; webVC.roomUid = roomUid; webVC.url = URLWithType(kAnchorFansOpenURL); [self.delegate.getCurrentNav pushViewController:webVC animated:YES]; } } else { if (self.relationFansModel.hasFansTeamCurrentRoom) {//开通了粉丝团 if (self.relationFansModel.isAnchorFans) { [Api requestFansTeamTask:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code != 200) { [XCHUDTool showErrorWithMessage:msg]; return; } XPAnchorFansTaskModel *model = [XPAnchorFansTaskModel modelWithJSON:data.data]; XPAnchorFansTaskViewController *fansTaskVc = [[XPAnchorFansTaskViewController alloc] initWithRoomUid:roomUid]; fansTaskVc.model = model; [self.delegate.getCurrentNav presentViewController:fansTaskVc animated:YES completion:nil]; } teamUid:roomUid]; } else { [Api requestJoinFansTeam:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code != 200) { [XCHUDTool showErrorWithMessage:msg]; return; } XPAnchorFansJoinModel *model = [XPAnchorFansJoinModel modelWithJSON:data.data]; XPAnchorFansTeamViewController *fansTeamVc = [[XPAnchorFansTeamViewController alloc] initWithRoomUid:roomUid]; fansTeamVc.model = model; [self.delegate.getCurrentNav presentViewController:fansTeamVc animated:YES completion:nil]; } teamUid:roomUid]; } } } } - (void)musicEnterButtonAction:(UIButton *)sender { if (!self.musicPlayView.superview) { [self addSubview:self.musicPlayView]; self.musicPlayView.frame = CGRectMake(-KScreenWidth, kNavigationHeight + 4, KScreenWidth - 85, 80); } POPBasicAnimation *moveAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter]; moveAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(-KScreenWidth, self.musicPlayView.center.y)]; moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(KScreenWidth/ 2, self.musicPlayView.center.y)]; moveAnimation.beginTime = CACurrentMediaTime(); moveAnimation.duration = 0.5; moveAnimation.repeatCount = 1; moveAnimation.removedOnCompletion = YES; [self.musicPlayView pop_addAnimation:moveAnimation forKey:@"moveOutAnimation"]; [UIView animateWithDuration:0.2 animations:^{ self.musicEnterButton.hidden = YES; } completion:nil]; [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_music_click]; } #pragma mark - 房间话题 - (void)updateRoomTopicViewConstraint { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; CGFloat offsetY = kNavigationHeight; if (roomInfo.roomModeType == RoomModeType_Open_Blind) { offsetY += ((50 + 5) * kScreenScale + 10 + 12 + 3 + 40); } else if (roomInfo.type == RoomType_Anchor) { offsetY += (120 + 5 + 6 + 20 +60 + 3); } else { offsetY += (50 + 5 + 10 + 12 + 3 + 40); } [self.topicStackView mas_updateConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(offsetY); }]; } - (void)updateRoomTopic { if (self.delegate.getRoomInfo.type == RoomType_Anchor && self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode) { self.topicStackView.hidden = YES; } else { self.topicStackView.hidden = ([ClientConfig shareConfig].configInfo.appStoreAuditNoticeVersion || self.delegate.getRoomInfo.type == RoomType_MiniGame) == YES; } [self updateRoomTopicViewConstraint]; NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error== nil) { NIMChatroomMember* member = members.firstObject; if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) { self.editButton.hidden = NO; } else { self.editButton.hidden = YES; } } }]; self.topicLabel.text = self.delegate.getRoomInfo.roomDesc.length > 0 ? self.delegate.getRoomInfo.roomDesc : @"暂未设置话题"; } - (void)topicGestureRecognizer:(UITapGestureRecognizer *)tap { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error== nil) { NIMChatroomMember* member = members.firstObject; RoomInfoModel * roomInfo= self.delegate.getRoomInfo; if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) { XPRoomTopicViewController * editTopicVC = [[XPRoomTopicViewController alloc] init]; editTopicVC.roomInfo = roomInfo; [self.delegate.getCurrentNav pushViewController:editTopicVC animated:YES]; } else { TTPopupService * config = [[TTPopupService alloc] init]; XPRoomTopicAlertView * alertView = [[XPRoomTopicAlertView alloc] init]; alertView.title = roomInfo.roomDesc; alertView.message = roomInfo.introduction; config.contentView = alertView; [TTPopup popupWithConfig:config]; } } }]; } #pragma mark - 弹窗关注房主 - (void)setFollowAnchorTimer { if (self.followAnchorTimer != nil) { dispatch_source_cancel(self.followAnchorTimer); } #ifdef DEBUG NSInteger totalTime = 5; #else NSInteger totalTime = 420; #endif dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); self.followAnchorTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); dispatch_source_set_timer(self.followAnchorTimer,dispatch_walltime(NULL, totalTime*NSEC_PER_SEC), totalTime*NSEC_PER_SEC, 0); //每秒执行 @weakify(self); dispatch_source_set_event_handler(self.followAnchorTimer, ^{ dispatch_async(dispatch_get_main_queue(), ^{ @strongify(self); if (self.followAnchorTimer != nil) { dispatch_source_cancel(self.followAnchorTimer); self.followAnchorTimer = nil; } RoomInfoModel* roomInfo = self.delegate.getRoomInfo; NSString *roomUid = [NSString stringWithFormat:@"%zd", roomInfo.uid]; NSString * uid = [[AccountInfoStorage instance] getUid]; [Api attentionStatusCompletion:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { BOOL isLike = ((NSNumber *)data.data).boolValue; if (!isLike && !roomInfo.isRoomFans && self.window) { // 还没有关注或收藏房间 [self showFollowAnchorView]; } } uid:uid isLikeUid:roomUid]; }); }); dispatch_resume(self.followAnchorTimer); } //弹出关注主播的窗口 - (void)showFollowAnchorView { RoomInfoModel* roomInfo = self.delegate.getRoomInfo; NSString *roomUid = [NSString stringWithFormat:@"%zd", roomInfo.uid]; [Api getUserInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { UserInfoModel *userInfo = [UserInfoModel modelWithDictionary:data.data]; XPRoomAnchorInfoCardView *view = [[XPRoomAnchorInfoCardView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 300)]; view.userInfo = self.delegate.getUserInfo; view.targetUserInfo = userInfo; view.roomId =roomInfo.roomId; [TTPopup popupView:view style:TTPopupStyleActionSheet]; } uid:roomUid]; } ///个播房用户请求上麦弹窗 - (void)showAskForUpMic:(NSDictionary *)dict { NSString *roomUid = [NSString stringWithFormat:@"%zd", self.delegate.getRoomInfo.uid]; if (![roomUid isEqualToString:[AccountInfoStorage instance].getUid]) { return; } UserInfoModel *model = [UserInfoModel modelWithJSON:dict]; XPAnchorAudienceUpMicView *upMicView = [[XPAnchorAudienceUpMicView alloc] initWithFrame:CGRectMake(0, 0, 300, 226) delegate:self.delegate]; upMicView.info = model; TTPopupConfig *config = [[TTPopupConfig alloc] init]; config.filterIdentifier = @"audienceRequestUpMic"; config.shouldFilterPopup = YES; config.contentView = upMicView; config.style = TTPopupStyleAlert; [TTPopup popupWithConfig:config]; } #pragma mark - 个播粉丝团 - (void)updateFansTeamEntranceView:(XPAnchorFansRelationModel *)model { if (!self.fansTeamEntranceView.superview) { [self insertSubview:self.fansTeamEntranceView atIndex:0]; [self.fansTeamEntranceView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.contributeEnterView.mas_bottom).mas_offset(5); make.left.mas_equalTo(0); make.height.mas_equalTo(37); }]; } self.fansTeamEntranceView.model = model; self.relationFansModel = model; } - (void)handleAnchorFansTeam:(AttachmentModel *)attachment { if (attachment.second == Custom_Message_Sub_FansTeam_Open_Success || attachment.second == Custom_Message_Sub_FansTeam_Join_Success || attachment.second == Custom_Message_Sub_FansTeam_Out_Success) { NSString *roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; NSString *uid; if ([attachment.data[@"uid"] isKindOfClass:[NSNumber class]]) { uid = [NSString stringWithFormat:@"%@", attachment.data[@"uid"]]; } else if ([attachment.data[@"uid"] isKindOfClass:[NSString class]]) { uid = attachment.data[@"uid"]; } if ([uid isEqualToString:[AccountInfoStorage instance].getUid] || [[AccountInfoStorage instance].getUid isEqualToString:roomUid]) { [Api requestInRoomFansTeam:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { XPAnchorFansRelationModel *model = [XPAnchorFansRelationModel modelWithJSON:data.data]; [self updateFansTeamEntranceView:model]; } teamUid:roomUid]; } } else if (attachment.second == Custom_Message_Sub_FansTeam_Open_Fail) { } } - (void)updateAnchorPkInfo:(AcrossRoomPKPanelModel *)acrossPKPanelInfo { self.delegate.getRoomInfo.roundId = acrossPKPanelInfo.roundId; self.delegate.getRoomInfo.pkUid = acrossPKPanelInfo.aUid; self.delegate.getRoomInfo.pkRoomId = acrossPKPanelInfo.aRoomId; self.delegate.getRoomInfo.pkState = acrossPKPanelInfo.pkState; self.delegate.getRoomInfo.winUid = acrossPKPanelInfo.winUid; } - (void)resetAnchorPkInfo { self.delegate.getRoomInfo.roundId = nil; self.delegate.getRoomInfo.pkUid = nil; self.delegate.getRoomInfo.pkRoomId = nil; self.delegate.getRoomInfo.pkState = nil; self.delegate.getRoomInfo.winUid = nil; } #pragma mark - 房间贵族小喇叭 - (void)handleTrumpet:(AttachmentModel *)attachment { if (self.trumpetQueue.count) { [self.trumpetQueue addObject:attachment.data]; } else { [self.trumpetQueue addObject:attachment.data]; __block NSInteger time = 5.0; //倒计时时间 if (_trumpetTimer == nil) { dispatch_queue_t queue = dispatch_get_global_queue(0, 0); _trumpetTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); dispatch_source_set_timer(_trumpetTimer,dispatch_walltime(NULL, 0), time*NSEC_PER_SEC, 0); //每秒执行 @weakify(self); dispatch_source_set_event_handler(_trumpetTimer, ^{ @strongify(self); if (self.trumpetQueue.count) { dispatch_sync(dispatch_get_main_queue(), ^{ [self createTrumpetAnimation:self.trumpetQueue.firstObject]; [self.trumpetQueue removeObjectAtIndex:0]; }); } else { dispatch_sync(dispatch_get_main_queue(), ^{ [self.trumpetView removeFromSuperview]; }); if (self.trumpetTimer != nil) { dispatch_source_cancel(self.trumpetTimer); self.trumpetTimer = nil; } } }); dispatch_resume(_trumpetTimer); } } } - (void)createTrumpetAnimation:(NSDictionary *)attatchment { if (!self.trumpetView.superview) { [self addSubview:self.trumpetView]; [self.trumpetView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self.delegate.getRoomInfo.type == RoomType_MiniGame ? kNavigationHeight: kNavigationHeight + 110); make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.height.mas_equalTo(153); }]; } self.trumpetView.data = attatchment; POPBasicAnimation *animation2 = [POPBasicAnimation animationWithPropertyNamed:kPOPViewFrame]; animation2.beginTime = CACurrentMediaTime(); animation2.duration = 0.1; CGFloat width = self.frame.size.width - 15; CGFloat height = 28; animation2.fromValue = [NSValue valueWithCGRect:CGRectMake(0, 153-34-28, width, height)]; animation2.toValue = [NSValue valueWithCGRect:CGRectMake(0, 153-34-28-14, width, height)]; animation2.removedOnCompletion = NO; animation2.repeatCount = 1; POPBasicAnimation *animation3 = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerOpacity]; animation3.duration = 0.1; animation3.beginTime = CACurrentMediaTime(); animation3.fromValue = @1; animation3.toValue = @0; animation3.repeatCount = 1; animation3.removedOnCompletion = NO; [animation2 setCompletionBlock:^(POPAnimation *anim, BOOL finished) { if (finished) { POPBasicAnimation *animation2 = [POPBasicAnimation animationWithPropertyNamed:kPOPViewFrame]; animation2.beginTime = CACurrentMediaTime(); animation2.duration = 0.1; CGFloat width = self.frame.size.width - 15; CGFloat height = 28; animation2.fromValue = [NSValue valueWithCGRect:CGRectMake(0, 153 - 34 - 14, width, height)]; animation2.toValue = [NSValue valueWithCGRect:CGRectMake(0, 153 - 34 - 28, width, height)]; animation2.removedOnCompletion = NO; animation2.repeatCount = 1; POPBasicAnimation *animation3 = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerOpacity]; animation3.duration = 0.1; animation3.beginTime = CACurrentMediaTime(); animation3.fromValue = @0; animation3.toValue = @1; animation3.repeatCount = 1; animation3.removedOnCompletion = NO; [self.trumpetView.mainView.layer pop_addAnimation:animation2 forKey:@"animation4"]; [self.trumpetView.mainView.layer pop_addAnimation:animation3 forKey:@"animation5"]; } }]; [self.trumpetView.mainView.layer pop_addAnimation:animation2 forKey:@"animation2"]; [self.trumpetView.mainView.layer pop_addAnimation:animation3 forKey:@"animation3"]; } #pragma mark - 房间榜入口榜单 - (void)updateContrionEntranceWithRoomUid:(NSString *)roomUid type:(NSString *)type { [Api requestRoomRankings:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {//获取房间榜 if (code == 200) { NSMutableArray *array = [NSMutableArray array]; for (NSDictionary *dict in data.data[@"rankings"]) { NSString *str = dict[@"avatar"]; if (str) { [array addObject:str]; } } self.contributeEnterView.array = array; } } roomUid:roomUid type:type page:@"1" pageSize:@"20"]; } #pragma mark - 个播小时榜入口 - (void)updateHourRankEntrance { if (self.delegate.getRoomInfo.type == RoomType_Anchor || self.delegate.getRoomInfo.isPermitRoom == PermitRoomType_Licnese) { if (!self.hourRankEntranceView.superview) { [self insertSubview:self.hourRankEntranceView atIndex:0]; [self.hourRankEntranceView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(15); make.centerY.mas_equalTo(self.contributeEnterView); make.width.mas_equalTo(61); make.height.mas_equalTo(22); }]; } } else { if (self.hourRankEntranceView.superview) {[self.hourRankEntranceView removeFromSuperview];} } } #pragma mark - XPRoomLittleGameListViewDelegate - (void)xPRoomLittleGameListView:(XPLittleGameRoomListView *)view didSelectItem:(LittleGameInfoModel *)itemInfo { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; NSMutableDictionary * params = [NSMutableDictionary dictionary]; NSString * uid = [AccountInfoStorage instance].getUid; NSString * ticket = [AccountInfoStorage instance].getTicket; [params setObject:ticket forKey:@"ticket"]; [params setObject:uid forKey:@"uid"]; [params setObject:[NSString stringWithFormat:@"%ld", roomInfo.uid] forKey:@"roomUid"]; if (roomInfo.title.length > 0) { [params setObject:roomInfo.title forKey:@"title"]; } if (roomInfo.roomPwd.length > 0) { [params setObject:roomInfo.roomPwd forKey:@"roomPwd"]; } else{ [params setObject:@"" forKey:@"roomPwd"]; } if (roomInfo.tagId > 0) { [params setObject:[NSString stringWithFormat:@"%ld", roomInfo.tagId] forKey:@"tagId"]; } if ([itemInfo.mgId isEqualToString:@"0"]) { [params setObject:@(RoomType_Game) forKey:@"type"]; [params setObject:@"0" forKey:@"mgId"]; } else { [params setObject:@(RoomType_MiniGame) forKey:@"type"]; [params setObject:itemInfo.mgId forKey:@"mgId"]; } [params setObject:@(roomInfo.hasAnimationEffect) forKey:@"hasAnimationEffect"]; [Api ownerUpdateRoomInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { } else { [XCHUDTool showErrorWithMessage:msg]; } } params:params]; } - (void)xPRoomLittleGameListView:(XPLittleGameRoomListView *)view didSelectChooseType:(UIButton *)sender { if ([self currentRoomIsInSudGame]) { [XCHUDTool showErrorWithMessage:@"游戏中不可切换游戏或玩法!"]; } else { sender.selected = !sender.selected; view.tableView.hidden = !sender.selected; } } #pragma mark - 房间背景音乐 -(void)pauseLayer:(CALayer*)layer { CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; layer.speed = 0.0; layer.timeOffset = pausedTime; } -(void)resumeLayer:(CALayer*)layer { CFTimeInterval pausedTime = [layer timeOffset]; layer.speed = 1.0; layer.timeOffset = 0.0; layer.beginTime = 0.0; CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; layer.beginTime = timeSincePause; } - (void)configPlayMusicRoomTypeChange { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; if (roomInfo.type == RoomType_MiniGame) { [self pauseLayer:self.musicEnterButton.imageView.layer]; [self.musicEnterButton removeFromSuperview]; [self.musicPlayView resetData]; [self.musicPlayView removeFromSuperview]; [[RtcManager instance] changePlayState:BackMusicPlayState_Stop]; } else { MicroQueueModel * currentUserModel; NSString * uid = [AccountInfoStorage instance].getUid; for (MicroQueueModel * microModel in self.delegate.getMicroQueue.allValues) { if (microModel.userInfo && microModel.userInfo.uid == uid.integerValue) { currentUserModel = microModel; } } if (currentUserModel) { if (!self.musicEnterButton.superview) { [self addSubview:self.musicEnterButton]; CGFloat topOffY = (self.delegate.getRoomInfo.type == RoomType_Anchor || self.delegate.getRoomInfo.isPermitRoom == PermitRoomType_Licnese) ? (kNavigationHeight+ 4 + 22 + 18) : (kNavigationHeight+ 4); if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind) {//相亲厅播放音乐 [self.musicEnterButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(16); make.centerY.mas_equalTo(self.contributeEnterView); make.width.mas_equalTo(22); make.height.mas_equalTo(22); }]; } else { if (self.hourRankEntranceView.superview) { [self.musicEnterButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.hourRankEntranceView.mas_right).mas_offset(4); make.centerY.mas_equalTo(self.contributeEnterView); make.width.mas_equalTo(22); make.height.mas_equalTo(22); }]; } else { [self.musicEnterButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(16); make.centerY.mas_equalTo(self.contributeEnterView); make.width.mas_equalTo(22); make.height.mas_equalTo(22); }]; } } } } } } ///跨房PK预约倒计时 - (void)showAcrossPkCountDownViewWithTime:(long long)time { if (self.acrossPKCountView.superview) { return; } if (self.acrossPKPanelView.superview) {//正在PK中 return; } if ([self.delegate getRoomInfo].roomModeType == RoomModeType_Open_AcrossRoomPK_mode) { return; } [self addSubview:self.acrossPKCountView]; self.acrossPKCountView.startTime = time; [self.acrossPKCountView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.height.mas_equalTo(52); make.width.mas_equalTo(52); make.top.mas_equalTo(self.contributeEnterView.mas_bottom).mas_offset(4); }]; [UIView animateWithDuration:0.5 animations:^{ CGRect frame = self.acrossPKCountView.frame; frame.origin.x = 0; self.acrossPKCountView.frame = frame; }]; } #pragma mark - 心愿礼物 - (void)tapWishGift { NSString * roomUid = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.uid]; XPWishGiftViewController * vc = [[XPWishGiftViewController alloc] initWithRoomUid:roomUid]; vc.delegate = self; vc.modalPresentationStyle = UIModalPresentationOverFullScreen; [self.delegate.getCurrentNav presentViewController:vc animated:YES completion:nil]; } - (void)configWishGiftEnter { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; NSString * roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid]; roomInfo.hasOpenWishGift = YES; if (roomInfo.hasOpenWishGift) { if (!self.wishGiftView.superview) { [self addSubview:self.wishGiftView]; [self.wishGiftView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self).offset(kNavigationHeight + 47); make.right.mas_equalTo(self.mas_right).offset(0); make.size.mas_equalTo(CGSizeMake(81, 30)); }]; } [Api wishGiftList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { NSArray * array = [WishGiftInfoModel modelsWithArray:data.data]; self.wishGiftView.giftList = array; self.wishGiftView.hidden = NO; } else { self.wishGiftView.hidden = YES; } } roomUid:roomUid]; } else { if (self.wishGiftView.superview) { [self.wishGiftView removeFromSuperview]; } } } - (void)xPWishGiftViewControllerSendClick:(NSString *)giftId { NSString * roomUid = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].uid]; XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid]; giftView.delegate = self.delegate; NSArray * giftUses = [self configGiftUsers:[self.delegate getMicroQueue]]; [giftView configGiftUsers:giftUses]; giftView.selectGiftId = giftId; [self.delegate.getCurrentNav presentViewController:giftView animated:YES completion:nil]; } #pragma mark - Getters And Setters - (XPRoomRankEntranceView *)contributeEnterView { if (!_contributeEnterView) { _contributeEnterView = [[XPRoomRankEntranceView alloc] init]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(contributionButtonAction:)]; [_contributeEnterView addGestureRecognizer:tap]; } return _contributeEnterView; } - (XPRoomAnchorRankEnterView *)hourRankEntranceView { if (!_hourRankEntranceView) { _hourRankEntranceView = [[XPRoomAnchorRankEnterView alloc] init]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onAnchorHourRankButtonAction:)]; [_hourRankEntranceView addGestureRecognizer:tap]; } return _hourRankEntranceView; } - (UIButton *)datingProgresButton { if (!_datingProgresButton) { _datingProgresButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_datingProgresButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xFA7186), UIColorFromRGB(0xFA4972)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(65, 30)] forState:UIControlStateNormal]; [_datingProgresButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; _datingProgresButton.titleLabel.font = [UIFont systemFontOfSize:13]; [_datingProgresButton setTitle:@"开始选择>" forState:UIControlStateNormal]; [_datingProgresButton addTarget:self action:@selector(datingProgresButtonAction:) forControlEvents:UIControlEventTouchUpInside]; _datingProgresButton.layer.masksToBounds = YES; _datingProgresButton.layer.cornerRadius = 15; } return _datingProgresButton; } - (XPAnchorFansTeamEntranceView *)fansTeamEntranceView { if (!_fansTeamEntranceView) { _fansTeamEntranceView = [[XPAnchorFansTeamEntranceView alloc]init]; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapFansTeamRecognizer)]; [_fansTeamEntranceView addGestureRecognizer:tap]; } return _fansTeamEntranceView; } - (UIStackView *)topicStackView { if (!_topicStackView) { _topicStackView = [[UIStackView alloc] init]; _topicStackView.axis = UILayoutConstraintAxisHorizontal; _topicStackView.distribution = UIStackViewDistributionFill; _topicStackView.alignment = UIStackViewAlignmentFill; _topicStackView.spacing = 3; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topicGestureRecognizer:)]; [_topicStackView addGestureRecognizer:tap]; } return _topicStackView; } - (UILabel *)topicLabel { if (!_topicLabel) { _topicLabel = [[UILabel alloc] init]; _topicLabel.font = [UIFont systemFontOfSize:12]; _topicLabel.textColor = [UIColor whiteColor]; } return _topicLabel; } - (UIButton *)editButton { if (!_editButton) { _editButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_editButton setImage:[UIImage imageNamed:@"room_postion_topic_edit"] forState:UIControlStateNormal]; [_editButton setImage:[UIImage imageNamed:@"room_postion_topic_edit"] forState:UIControlStateSelected]; _editButton.hidden = YES; } return _editButton; } - (XPAcrpssRoomPKPanelView *)acrossPKPanelView { if (!_acrossPKPanelView) { _acrossPKPanelView = [[XPAcrpssRoomPKPanelView alloc] init]; _acrossPKPanelView.delegate = self; } return _acrossPKPanelView; } - (XPLittleGameMiniStageView *)littleGameMiniView { if (!_littleGameMiniView) { _littleGameMiniView = [[XPLittleGameMiniStageView alloc] init]; } return _littleGameMiniView; } - (XPLittleGameRoomListView *)gameListView { if (!_gameListView) { _gameListView = [[XPLittleGameRoomListView alloc] init]; _gameListView.delegate = self; } return _gameListView; } - (XPAnchorPkPanelView *)anchorPKPanelView { if (!_anchorPKPanelView) { _anchorPKPanelView = [[XPAnchorPkPanelView alloc] init]; _anchorPKPanelView.delegate = self; } return _anchorPKPanelView; } - (XPRoomTrumpetView *)trumpetView { if (!_trumpetView) { _trumpetView = [[XPRoomTrumpetView alloc] init]; } return _trumpetView; } - (NSMutableArray *)trumpetQueue { if (!_trumpetQueue) { _trumpetQueue = [NSMutableArray array]; } return _trumpetQueue; } - (UIButton *)musicEnterButton { if (!_musicEnterButton) { _musicEnterButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_musicEnterButton setImage:[UIImage imageNamed:@"room_music_player_enter"] forState:UIControlStateNormal]; _musicEnterButton.layer.masksToBounds = YES; _musicEnterButton.layer.cornerRadius = 11; _musicEnterButton.backgroundColor = UIColorRGBAlpha(0xffffff, 0.2); [_musicEnterButton addTarget:self action:@selector(musicEnterButtonAction:) forControlEvents:UIControlEventTouchUpInside]; CAKeyframeAnimation *lAni = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; lAni.duration = 1.5; lAni.repeatCount = HUGE; lAni.values=@[@0,@(M_PI*2)]; //使得动画结束后,保持动画效果 lAni.removedOnCompletion = NO; lAni.fillMode = kCAFillModeForwards; [_musicEnterButton.imageView.layer addAnimation:lAni forKey:nil]; } return _musicEnterButton; } - (XPRoomBackMusicPlayerView *)musicPlayView { if (!_musicPlayView) { _musicPlayView = [[XPRoomBackMusicPlayerView alloc] init]; _musicPlayView.delegate = self; } return _musicPlayView; } - (XPRoomPKProgressView *)roompkPanelView { if (!_roompkPanelView) { _roompkPanelView = [[XPRoomPKProgressView alloc] init]; } return _roompkPanelView; } - (XPAcrossRoomPKCountDownView *)acrossPKCountView { if (!_acrossPKCountView) { _acrossPKCountView = [[XPAcrossRoomPKCountDownView alloc] initWithFrame:CGRectMake(KScreenWidth, kNavigationHeight+4+22+4, 52, 52)]; } return _acrossPKCountView; } - (XPWishGiftEnterView *)wishGiftView { if (!_wishGiftView) { _wishGiftView = [[XPWishGiftEnterView alloc] init]; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapWishGift)]; [_wishGiftView addGestureRecognizer:tap]; } return _wishGiftView; } @end