// // XPRoomBottomMenuView.m // xplan-ios // // Created by 冯硕 on 2021/10/11. // #import "XPRoomMenuContainerView.h" ///Third #import ///Tool #import "AccountInfoStorage.h" #import "TTPopup.h" #import "RtcManager.h" #import "StatisticsServiceHelper.h" #import "XCCurrentVCStackManager.h" #import "UIImage+Utils.h" ///Model #import "XPRoomMenuItem.h" #import "MicroQueueModel.h" #import "UserInfoModel.h" #import "MicroStateModel.h" #import "RoomInfoModel.h" #import "AttachmentModel.h" #import "GuildSuperAdminInfoModel.h" ///View #import "XPRoomSendTextView.h" #import "XPSendGiftView.h" #import "SessionListViewController.h" #import "XPRoomMoreMenuViewController.h" #import "VIPCenterViewController.h" #import "XPRoomFaceViewController.h" #import "XPRoomHalfMessageView.h" #import "XPRoomMessageBubbleView.h" #import "MSRoomMenuGameVC.h" #import "SVGA.h" @interface XPRoomMenuContainerView () ///输入框 @property (nonatomic,strong) UIButton *inputButton; ///麦 @property (nonatomic,strong) UIButton *micButton; ///声音 @property (nonatomic,strong) UIButton *voiceButton; ///表情 @property (nonatomic,strong) UIButton *faceButton; ///私聊 @property (nonatomic,strong) UIButton *messageButton; ///更多 @property (nonatomic,strong) UIButton *moreButton; /// PK 入口 @property (nonatomic,strong) UIButton *pkButton; ///礼物 @property (nonatomic,strong) UIButton *giftButton; ///排麦 @property (nonatomic,strong) UIButton *arrangeMicButton; ///游戏、活动 @property(nonatomic,strong) UIButton *baiShunGameButton; ///输入框 @property (nonatomic,strong) XPRoomSendTextView *inputTextView; @property (nonatomic,strong) XPRoomMessageBubbleView *miniMessageView; ///代理 @property (nonatomic,weak) id delegate; @property (nonatomic, strong) UIStackView *stackView; @end @implementation XPRoomMenuContainerView - (instancetype)initWithDelegate:(id)delegate { self = [super init]; if (self) { self.delegate = delegate; [self initSubViews]; [self initSubViewConstraints]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showGiftView:) name:@"kShowGiftView" object:nil]; } return self; } - (void)menuResignFirstResponder { [self.inputTextView.editTextFiled resignFirstResponder]; } -(void)showInputView:(NSString *)text{ [self menuButtonAction:self.inputButton]; [self.inputTextView showInputView:text]; } #pragma mark - Response - (void)menuButtonAction:(UIButton *)sender { XPRoomMenuItemType type = sender.tag; switch (type) { case XPRoomMenuItemType_Input: { if (self.delegate.getRoomInfo.isCloseScreen && self.delegate.getPublicScreenType == 0) { [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomMenuContainerView0")]; return; } if (self.delegate.getRoomInfo.type == RoomType_Anchor) { self.inputTextView = [XPRoomSendTextView showTextView:self.superview.superview delegate:self.delegate atUid:nil atNick:nil]; } else { self.inputTextView = [XPRoomSendTextView showTextView:self.superview delegate:self.delegate atUid:nil atNick:nil]; } } break; case XPRoomMenuItemType_Mic: { [RtcManager instance].localMuted = !self.micButton.isSelected; if([RtcManager instance].localMuted == NO){ for (MicroQueueModel *sequence in [self.delegate getMicroQueue].allValues) { if ([AccountInfoStorage instance].getUid.integerValue == sequence.userInfo.uid) { [[RtcManager instance] broadcast:YES]; } } } self.micButton.selected = [RtcManager instance].isLocalMuted; } break; case XPRoomMenuItemType_Voice: { [RtcManager instance].remoteMuted = !self.voiceButton.isSelected; self.voiceButton.selected = [RtcManager instance].isRemoteMuted; } break; case XPRoomMenuItemType_Face: { XPRoomFaceViewController * faceVC = [[XPRoomFaceViewController alloc] init]; faceVC.modalPresentationStyle = UIModalPresentationOverFullScreen; faceVC.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; [self.delegate.getCurrentNav presentViewController:faceVC animated:YES completion:nil]; } break; case XPRoomMenuItemType_Gift: { NSString * roomUid = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].uid]; XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid]; giftView.delegate = self.delegate; giftView.freeModel = self.freeModel; NSArray * giftUses = [self configGiftUsers:[self.delegate getMicroQueue]]; [giftView configGiftUsers:giftUses]; [self.delegate.getCurrentNav presentViewController:giftView animated:YES completion:nil]; } break; case XPRoomMenuItemType_Message: { 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; }]; } break; case XPRoomMenuItemType_More: { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"XP didTapForNewFunction"]; [self.moreButton setImage:[UIImage imageNamed:@"room_menu_more"] forState:UIControlStateNormal]; XPRoomMoreMenuViewController * moreMenuVC = [[XPRoomMoreMenuViewController alloc] initWithDelegate:self.delegate]; [self.delegate.getCurrentNav presentViewController:moreMenuVC animated:YES completion:nil]; } break; case XPRoomMenuItemType_ArrangeMic:{ if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode && self.delegate.isRoomPKPlaying) { [XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomMenuContainerView1")]; return; } self.arrangeMicButton.selected = NO; 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) { NIMChatroomMember * member; if (error == nil) { member = members.firstObject; } RoomInfoModel * roomInfo = self.delegate.getRoomInfo; XPArrangeMicInfoModel * info = [[XPArrangeMicInfoModel alloc] init]; info.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid]; info.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; info.nick = roomInfo.nick; info.roomAvatar = roomInfo.avatar; info.roomTitle = roomInfo.title; info.micQueue = [self.delegate getMicroQueue]; info.isManager = (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager); info.type = roomInfo.roomModeType == RoomModeType_Open_Blind ? ArrangeMicType_Dating : roomInfo.roomModeType == RoomModeType_Open_PK_Mode ? ArrangeMicType_Room_PK : ArrangeMicType_Normal; XPArrangeMicViewController * arrangeMicVC = [[XPArrangeMicViewController alloc] initWithInfo:info]; [self.delegate.getCurrentNav presentViewController:arrangeMicVC animated:YES completion:nil]; }]; } break; case XPRoomMenuItemType_Noble: { [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventvipEntranceRoomClick]; VIPCenterViewController * nobleVC = [[VIPCenterViewController alloc] initWithRoomUid:self.delegate.getRoomInfo.uid]; [self.delegate.getCurrentNav pushViewController:nobleVC animated:YES]; } break; case MSRoomMenuItemType_BAISHUN_GAME: { MSRoomMenuGameVC *vc = [[MSRoomMenuGameVC alloc]initWithDelegate:self.delegate roomMenuType:MSRoomMenuTypeLittleGame]; vc.modalPresentationStyle = UIModalPresentationOverFullScreen; [self.delegate.getCurrentNav presentViewController:vc animated:YES completion:nil]; break; } case XPRoomMenuItemType_PK: { MSRoomMenuGameVC *vc = [[MSRoomMenuGameVC alloc] initWithDelegate:self.delegate roomMenuType:MSRoomMenuTypePK]; vc.modalPresentationStyle = UIModalPresentationOverFullScreen; [self.delegate.getCurrentNav presentViewController:vc animated:YES completion:nil]; break; } default: break; } } #pragma mark - notification - (void)showGiftView:(NSNotification *)noti { NSDictionary *dict = noti.object; NSString *giftId = dict[@"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 - Private Method - (void)initSubViews { [self addSubview:self.stackView]; [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(self); make.leading.mas_equalTo(self).offset(15); make.trailing.mas_equalTo(self).offset(-15); make.height.mas_equalTo(46); }]; [self.stackView addArrangedSubview:self.inputButton]; [self.stackView addArrangedSubview:self.micButton]; [self.stackView addArrangedSubview:self.voiceButton]; [self.stackView addArrangedSubview:self.arrangeMicButton]; [self.stackView addArrangedSubview:self.messageButton]; [self.stackView addArrangedSubview:self.moreButton]; [self.stackView addArrangedSubview:self.giftButton]; [self.stackView addSubview:self.faceButton]; } - (void)initSubViewConstraints { [self.inputButton mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(110, 36)); }]; [self.faceButton mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.mas_equalTo(self.inputButton); make.trailing.mas_equalTo(self.inputButton).offset(-7); make.width.height.mas_equalTo(22); }]; [self.micButton mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(36); }]; [self.voiceButton mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(36); }]; [self.messageButton mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(36); }]; [self.moreButton mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(36); }]; [self.giftButton mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(46, 46)); }]; } - (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.vipMic = userInfo.vipMic; userModel.position = [NSString stringWithFormat:@"%d", microModel.microState.position]; userModel.uid = userInfo.uid; if (self.delegate.getRoomInfo.type == RoomType_Anchor && microModel.microState.position == -1) {///个播房一直为离开模式,不需要添加房主位 continue; } [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]; } else if (self.delegate.getRoomInfo.type == RoomType_Anchor) { RoomInfoModel * roomInfo= self.delegate.getRoomInfo; BOOL hadContainerOwner = NO; for (UserInfoModel *userModel in array) { if (userModel.uid == roomInfo.uid) { hadContainerOwner = YES; break; } } if (!hadContainerOwner) { XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init]; userModel.avatar = roomInfo.avatar; userModel.position = @"-1"; userModel.uid = roomInfo.uid; [array addObject:userModel]; } } return array; } - (MicroQueueModel *)findMySelfMicro:(NSMutableDictionary *)queue { NSString * uid = [AccountInfoStorage instance].getUid; for (MicroQueueModel * microModel in queue.allValues) { if (microModel.userInfo && microModel.userInfo.uid == uid.integerValue) { return microModel; } } return nil; } - (void)updateMoreRedDotState { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; if (roomInfo.uid == [[AccountInfoStorage instance].getUid integerValue] && // 房主 roomInfo.isPermitRoom != PermitRoomType_License && // 普通 (roomInfo.type != RoomType_Anchor && roomInfo.type != RoomType_MiniGame)) { // 非個播 / 非小遊戲 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"XP didTapForNewFunction"]) { [self.moreButton setImage:[UIImage imageNamed:@"room_menu_more"] forState:UIControlStateNormal]; } else { [self.moreButton setImage:[UIImage imageNamed:@"room_menu_more_red"] forState:UIControlStateNormal]; } } else { [self.moreButton setImage:[UIImage imageNamed:@"room_menu_more"] forState:UIControlStateNormal]; } } #pragma mark - RoomGuestDelegate - (void)onMicroQueueUpdate:(NSMutableDictionary *)queue { MicroQueueModel * model = [self findMySelfMicro:queue]; if (model) { self.micButton.hidden = NO; self.micButton.selected = model.microState.micState == MicroMicStateType_Close ? YES : [RtcManager instance].isLocalMuted; self.micButton.enabled = model.microState.micState == MicroMicStateType_Open; self.faceButton.hidden = NO; } else { self.micButton.hidden = YES; self.faceButton.hidden = YES; } [self updateMoreRedDotState]; } - (void)onRoomEntered { NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount]; self.messageButton.selected = unreadCount > 0; [self onRoomUpdate]; } - (void)onRoomUpdate { RoomInfoModel * roomInfo = self.delegate.getRoomInfo; // MARK: 房主 or 超管可以看到按钮 self.baiShunGameButton.hidden = YES; self.pkButton.hidden = YES; if ([AccountInfoStorage instance].getUid.integerValue == roomInfo.uid) { self.baiShunGameButton.hidden = NO; self.pkButton.hidden = roomInfo.type == RoomType_Anchor; } else { for (GuildSuperAdminInfoModel *managerInfo in self.delegate.getRoomSuperAdminList) { if ([managerInfo.uid isEqualToString:[AccountInfoStorage instance].getUid]) { self.baiShunGameButton.hidden = NO; self.pkButton.hidden = NO; break; } } } self.arrangeMicButton.hidden = roomInfo.roomModeType != RoomModeType_Open_Micro_Mode; if (roomInfo.roomModeType == RoomModeType_Open_Blind || roomInfo.roomModeType == RoomModeType_Open_PK_Mode || roomInfo.roomModeType == RoomModeType_Open_Micro_Mode) { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; if([AccountInfoStorage instance].getUid != nil){ request.userIds = @[[AccountInfoStorage instance].getUid]; } @kWeakify(self); [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { @kStrongify(self); if (error == nil) { NIMChatroomMember * member = members.firstObject; if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) { self.arrangeMicButton.hidden = NO; return; } } self.arrangeMicButton.hidden = YES; }]; } [self updateMoreRedDotState]; } - (void)handleNIMCustomMessage:(NIMMessage *)message { NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { AttachmentModel *attachment = (AttachmentModel *)obj.attachment; if (attachment.first == CustomMessageType_Arrange_Mic || attachment.first == CustomMessageType_Room_PK) { if (attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty || attachment.second == Custom_Message_Sub_Arrange_Mic_Empty || attachment.second == Custom_Message_Sub_Room_PK_Empty || attachment.second == Custom_Message_Sub_Room_PK_Non_Empty) { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; @kWeakify(self); [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { @kStrongify(self); NIMChatroomMember * member; if (error == nil) { member = members.firstObject; } if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) { self.arrangeMicButton.selected = (attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty || attachment.second == Custom_Message_Sub_Room_PK_Non_Empty); }; }]; } } } [self updateMoreRedDotState]; } - (void)handleNIMNotificationMessage:(NIMMessage *)message { NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject; NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content; switch (content.eventType) { case NIMChatroomEventTypeAddManager: { if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind || self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) { for (NIMChatroomNotificationMember * member in content.targets) { if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) { self.arrangeMicButton.hidden = NO; break; } } } } break; case NIMChatroomEventTypeRemoveManager: { if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind || self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) { for (NIMChatroomNotificationMember * member in content.targets) { if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) { self.arrangeMicButton.hidden = YES; break; } } } } break; default: break; } } - (void)addNIMRecentSession:(NIMRecentSession *)session { if (!self.miniMessageView.superview) { [self.superview insertSubview:self.miniMessageView aboveSubview:self]; [self.miniMessageView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self.messageButton); make.bottom.mas_equalTo(self.messageButton.mas_top).offset(-2); make.size.mas_equalTo(CGSizeMake(87, 55)); }]; } [self.miniMessageView addRecentSession:session]; NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount]; self.messageButton.selected = unreadCount > 0; } - (void)removeNIMRecentSession:(NIMRecentSession *)session { NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount]; self.messageButton.selected = unreadCount > 0; } #pragma mark - XPRoomMessageBubbleViewDelegate - (void)xPRoomMessageBubbleView:(XPRoomMessageBubbleView *)view didSelectSession:(NIMRecentSession *)session { UIViewController * controller = (UIViewController *)self.delegate; XPRoomHalfMessageView *halfMessageView = [[XPRoomHalfMessageView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight) controller:controller]; halfMessageView.chatUserId = session.session.sessionId; [controller.view addSubview:halfMessageView]; [UIView animateWithDuration:.35 animations:^{ CGRect rect = halfMessageView.frame; rect.origin.y = 0; halfMessageView.frame = rect; }]; } #pragma mark - Getters And Setters - (UIButton *)inputButton { if (!_inputButton) { _inputButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_inputButton setTitle:YMLocalizedString(@"XPRoomMenuContainerView2") forState:UIControlStateNormal]; [_inputButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; _inputButton.titleLabel.font = [UIFont systemFontOfSize:13 weight:UIFontWeightMedium]; _inputButton.titleLabel.numberOfLines = 2; _inputButton.layer.masksToBounds = YES; _inputButton.layer.cornerRadius = 18; if (isMSRTL()) { _inputButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight; } else { _inputButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; } // 设置标题的边距 _inputButton.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); _inputButton.backgroundColor = [UIColor colorWithWhite:0 alpha:0.4]; _inputButton.tag = XPRoomMenuItemType_Input; [_inputButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _inputButton; } - (UIButton *)micButton { if (!_micButton) { _micButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_micButton setImage:[UIImage imageNamed:@"room_menu_mic_open"] forState:UIControlStateNormal]; [_micButton setImage:[UIImage imageNamed:@"room_menu_mic_close"] forState:UIControlStateSelected]; [_micButton setImage:[UIImage imageNamed:@"room_menu_mic_close"] forState:UIControlStateDisabled | UIControlStateSelected]; _micButton.tag = XPRoomMenuItemType_Mic; [_micButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; _micButton.hidden = YES; } return _micButton; } - (UIButton *)voiceButton { if (!_voiceButton) { _voiceButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_voiceButton setImage:[UIImage imageNamed:@"room_menu_voice_open"] forState:UIControlStateNormal]; [_voiceButton setImage:[UIImage imageNamed:@"room_menu_voice_close"] forState:UIControlStateSelected]; _voiceButton.tag = XPRoomMenuItemType_Voice; [_voiceButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _voiceButton; } - (UIButton *)faceButton { if (!_faceButton) { _faceButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_faceButton setImage:[UIImage imageNamed:@"room_menu_face"] forState:UIControlStateNormal]; [_faceButton setImage:[UIImage imageNamed:@"room_menu_face"] forState:UIControlStateSelected]; _faceButton.tag = XPRoomMenuItemType_Face; [_faceButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; _faceButton.hidden = YES; } return _faceButton; } - (UIButton *)messageButton { if (!_messageButton) { _messageButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_messageButton setImage:[UIImage imageNamed:@"room_menu_message"] forState:UIControlStateNormal]; [_messageButton setImage:[UIImage imageNamed:@"room_menu_new_message"] forState:UIControlStateSelected]; _messageButton.tag = XPRoomMenuItemType_Message; [_messageButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _messageButton; } - (UIButton *)moreButton { if (!_moreButton) { _moreButton = [UIButton buttonWithType:UIButtonTypeCustom]; _moreButton.imageView.contentMode = UIViewContentModeScaleAspectFit; _moreButton.tag = XPRoomMenuItemType_More; [_moreButton setImage:[UIImage imageNamed:@"room_menu_more"] forState:UIControlStateNormal]; [_moreButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _moreButton; } - (UIButton *)pkButton { if (!_pkButton) { _pkButton = [UIButton buttonWithType:UIButtonTypeCustom]; _pkButton.imageView.contentMode = UIViewContentModeScaleAspectFit; _pkButton.tag = XPRoomMenuItemType_PK; [_pkButton setImage:[UIImage imageNamed:@"ms_room_menu_game"] forState:UIControlStateNormal]; [_pkButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _pkButton; } - (UIButton *)giftButton { if (!_giftButton) { _giftButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_giftButton setImage:kImage(@"big_gift_button") forState:UIControlStateNormal]; _giftButton.tag = XPRoomMenuItemType_Gift; [_giftButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _giftButton; } - (UIStackView *)stackView { if (!_stackView) { _stackView = [[UIStackView alloc] init]; _stackView.spacing = 9; _stackView.alignment = UIStackViewAlignmentBottom; } return _stackView; } - (UIButton *)arrangeMicButton { if (!_arrangeMicButton) { _arrangeMicButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_arrangeMicButton setImage:kImage(@"room_menu_arrange_mic") forState:UIControlStateNormal]; [_arrangeMicButton setImage:kImage(@"room_menu_arrange_mic_new") forState:UIControlStateSelected]; _arrangeMicButton.tag = XPRoomMenuItemType_ArrangeMic; [_arrangeMicButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; _arrangeMicButton.hidden = YES; } return _arrangeMicButton; } - (XPRoomMessageBubbleView *)miniMessageView { if (!_miniMessageView) { _miniMessageView = [[XPRoomMessageBubbleView alloc] init]; _miniMessageView.delegate = self; } return _miniMessageView; } - (UIButton *)baiShunGameButton{ if(!_baiShunGameButton){ _baiShunGameButton = [UIButton new]; [_baiShunGameButton setImage:[UIImage imageNamed:@"room_menu_play"] forState:UIControlStateNormal]; [_baiShunGameButton setImage:[UIImage imageNamed:@"room_menu_play"] forState:UIControlStateSelected]; _baiShunGameButton.tag = MSRoomMenuItemType_BAISHUN_GAME; [_baiShunGameButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside]; } return _baiShunGameButton; } @end