// // XPRoomInfoView.m // xplan-ios // // Created by 冯硕 on 2021/10/11. // #import "RoomHeaderView.h" ///Third #import #import #import #import #import "TTPopup.h" #import ///Tool #import "UIImage+Utils.h" #import "UIButton+EnlargeTouchArea.h" #import "XPMacro.h" #import "ThemeColor+Room.h" #import "TTPopup.h" #import "XCHUDTool.h" #import "XPHtmlUrl.h" #import "ApiHost.h" #import "AccountInfoStorage.h" #import "HttpRequestHelper.h" #import "Api+Room.h" #import "XCCurrentVCStackManager.h" #import "StatisticsServiceHelper.h" #import "NSMutableDictionary+Saft.h" #import "NetImageView.h" ///Model #import "RoomInfoModel.h" #import "UserInfoModel.h" #import "AttachMentModel.h" #import "MicroQueueModel.h" #import "XPRoomRecommendModel.h" ///View #import "XPShareView.h" #import "XPRoomRecommendView.h" ///VC #import "XPWebViewcontroller.h" #import "XPRoomOnLineViewController.h" #import "XPRoomViewController.h" @interface RoomHeaderView () ///返回按钮 @property (nonatomic, strong) UIButton *backButton; ///圆角背景 @property (nonatomic, strong) UIStackView *nickBgStackView; ///占位的 @property (nonatomic, strong) UIView *spaceView; ///容器 @property (nonatomic,strong) UIStackView *nickStackView; ///头像 @property (nonatomic,strong) NetImageView *avatarImageView; /// @property (nonatomic,strong) UIStackView *titleStackView; ///房间名字 @property (nonatomic,strong) MarqueeLabel *titleLabel; ///礼物特效 @property (nonatomic,strong) UIImageView *giftEffectImageView; ///锁房标识 @property (nonatomic,strong) UIImageView *lockRoomImageView; /// @property (nonatomic,strong) UIStackView *onlineStackView; ///绿色的小圆点 @property (nonatomic,strong) UIView * greenDotView; ///房间id @property (nonatomic,strong) YYLabel *idLabel; ///在线人数 @property (nonatomic,strong) UILabel *onLineLabel; ///收藏 @property (nonatomic,strong) UIButton *collectButton; ///设置 @property (nonatomic,strong) UIButton *settingButton; @property (nonatomic, weak) id hostDelegate; ///右侧推荐房间 @property (nonatomic, strong) XPRoomRecommendView *recommendRoomView; ///是否已发送过收藏房间公屏消息 @property (nonatomic, assign) BOOL hadShowCollectInScreen; @end @implementation RoomHeaderView - (instancetype)initWithDelegate:(id)delegate { self = [super init]; if (self) { _hostDelegate = delegate; [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Event Response - (void)backButtonAction:(UIButton *)sender { [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_return_click eventAttributes:@{@"roomUid" : @(self.hostDelegate.getRoomInfo.uid)}]; [self.hostDelegate miniRoom]; } - (void)shareButtonAction:(UIButton *)sender{ [self showSharePanel]; } - (void)settingButtonAction:(UIButton *)sender { self.recommendRoomView.frame = CGRectMake(KScreenWidth, 0, 250, KScreenHeight); FFPopup *popup = [FFPopup popupWithContentView:self.recommendRoomView]; popup.showType = FFPopupShowType_SlideInFromRight; popup.dismissType = FFPopupDismissType_SlideOutToRight; popup.maskType = FFPopupMaskType_Dimmed; popup.dimmedMaskAlpha = 0.0; popup.shouldDismissOnBackgroundTouch = YES; FFPopupHorizontalLayout horizontalLayout = FFPopupHorizontalLayout_Right; FFPopupVerticalLayout verticalLayout = FFPopupVerticalLayout_Center; [popup showWithLayout:FFPopupLayoutMake(horizontalLayout, verticalLayout) duration:0.0]; popup.didFinishDismissingBlock = ^{ [self.recommendRoomView removeFromSuperview]; }; popup.didFinishShowingBlock = ^{ }; [Api reqeustRecommendRoom:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { NSArray *array = [XPRoomRecommendModel modelsWithArray:data.data]; self.recommendRoomView.roomList = [NSMutableArray arrayWithArray:array]; } } roomId:[NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]]; } - (void)onlineTapRecognizer { [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_online_list_click eventAttributes:@{@"roomUid" : @(self.hostDelegate.getRoomInfo.uid)}]; XPRoomOnLineViewController * onlineVC = [[XPRoomOnLineViewController alloc] initWithDelegate:self.hostDelegate]; [self.hostDelegate.getCurrentNav pushViewController:onlineVC animated:YES]; } #pragma mark - Private Method - (void)initSubViews { // [self addSubview:self.backButton]; [self addSubview:self.nickBgStackView]; [self addSubview:self.settingButton]; [self.nickBgStackView addArrangedSubview:self.avatarImageView]; [self.nickBgStackView addArrangedSubview:self.nickStackView]; [self.nickBgStackView addArrangedSubview:self.collectButton]; [self.nickBgStackView addArrangedSubview:self.spaceView]; [self.nickStackView addArrangedSubview:self.titleStackView]; [self.nickStackView addArrangedSubview:self.onlineStackView]; [self.onlineStackView addArrangedSubview:self.idLabel]; [self.onlineStackView addArrangedSubview:self.greenDotView]; [self.onlineStackView addArrangedSubview:self.onLineLabel]; [self.titleStackView addArrangedSubview:self.titleLabel]; [self.titleStackView addArrangedSubview:self.giftEffectImageView]; [self.titleStackView addArrangedSubview:self.lockRoomImageView]; } - (void)initSubViewConstraints { // [self.backButton mas_makeConstraints:^(MASConstraintMaker *make) { // make.left.equalTo(self).offset(14); // make.height.width.equalTo(@22); // make.centerY.mas_equalTo(self.settingButton); // }]; // 设置 [self.settingButton mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(-13); make.centerY.mas_equalTo(self.nickBgStackView); make.width.height.mas_equalTo(25); }]; [self.nickBgStackView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(15); make.bottom.mas_equalTo(-5); make.height.mas_equalTo(34); }]; [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(self.nickBgStackView.mas_height); }]; [self.collectButton mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(20); }]; [self.spaceView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(4); make.height.mas_equalTo(1); }]; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_lessThanOrEqualTo(100); make.height.mas_equalTo(18); }]; [self.greenDotView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(3,3)); }]; [self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(16); }]; [self.giftEffectImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(10,10)); }]; [self.lockRoomImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(10,10)); }]; } #pragma mark - RoomGuestDelegate - (void)onRoomEntered { RoomInfoModel* roomInfo = self.hostDelegate.getRoomInfo; ///最小化进房 人数不对的问题 [[[NIMSDK sharedSDK] chatroomManager] fetchChatroomInfo:[NSString stringWithFormat:@"%ld", (long)self.hostDelegate.getRoomInfo.roomId] completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom) { if (error == nil) { self.onLineLabel.text = [NSString stringWithFormat:@"%ld", (long)(chatroom.onlineUserCount > 0 ? chatroom.onlineUserCount : 0)]; } else { self.onLineLabel.text = [NSString stringWithFormat:@"%ld", (long)(roomInfo.onlineNum > 0 ? roomInfo.onlineNum : 0)]; } }]; if (roomInfo) { self.titleLabel.text = roomInfo.title; self.idLabel.text = [NSString stringWithFormat:@"ID:%ld",roomInfo.erbanNo]; self.giftEffectImageView.hidden = roomInfo.hasAnimationEffect; if (roomInfo.uid == [AccountInfoStorage instance].getUid.integerValue) { self.collectButton.hidden = YES; } else { self.collectButton.hidden = roomInfo.isRoomFans; } self.lockRoomImageView.hidden = roomInfo.roomPwd.length <= 0; } } - (void)onRoomUpdate { RoomInfoModel* roomInfo = self.hostDelegate.getRoomInfo; self.avatarImageView.imageUrl = roomInfo.avatar; self.titleLabel.text = roomInfo.title; self.idLabel.text = [NSString stringWithFormat:@"ID:%ld",roomInfo.erbanNo]; self.onLineLabel.text = [NSString stringWithFormat:@"%ld", (long)(roomInfo.onlineNum > 0 ? roomInfo.onlineNum : 0)]; self.giftEffectImageView.hidden = roomInfo.hasAnimationEffect; if (roomInfo.uid == [AccountInfoStorage instance].getUid.integerValue) { self.collectButton.hidden = YES; } else { self.collectButton.hidden = roomInfo.isRoomFans; } self.lockRoomImageView.hidden = roomInfo.roomPwd.length <= 0; } #pragma mark - Event Response - (void)showSharePanel { XPShareItem *cycle = [XPShareItem itemWitTag:XPShareItemTagMoments title:@"朋友圈" imageName:@"share_wechat_circle_normal" disableImageName:@"share_wechat_circle_disable"]; XPShareItem *wechat = [XPShareItem itemWitTag:XPShareItemTagWeChat title:@"微信好友" imageName:@"share_wechat_normal" disableImageName:@"share_wechat_disable"]; XPShareItem *qq = [XPShareItem itemWitTag:XPShareItemTagQQ title:@"QQ好友" imageName:@"share_qq_normal" disableImageName:@"share_qq_disable"]; XPShareItem *qqzone = [XPShareItem itemWitTag:XPShareItemTagQQZone title:@"QQ空间" imageName:@"share_qqzone_normal" disableImageName:@"share_qqzone_disable"]; NSArray * items = @[wechat,cycle, qq, qqzone]; RoomInfoModel * roomInfo = [self.hostDelegate getRoomInfo]; XPShareInfoModel * shareInfo = [[XPShareInfoModel alloc] init]; shareInfo.shareTitle = @"聆听声音,分享快乐"; shareInfo.shareContent = [NSString stringWithFormat:@"%@ 这个房间很好玩,推荐给你,快来和我一起玩吧~", roomInfo.title]; shareInfo.shareImageUrl = [self.hostDelegate getRoomInfo].avatar; shareInfo.type = ShareType_Room; shareInfo.roomUid = roomInfo.uid; NSString * uid = [AccountInfoStorage instance].getUid; NSString * urlString = [NSString stringWithFormat:@"%@/%@?shareUid=%@&uid=%ld&room_name=%@&room_id=%ld&room_avatar=%@&share_name=%@",API_HOST_URL,URLWithType(kShareRoomURL),uid,roomInfo.uid,roomInfo.title,roomInfo.erbanNo,roomInfo.avatar,roomInfo.nick]; shareInfo.shareUrl = urlString; CGFloat margin = 15; CGSize itemSize = CGSizeMake((KScreenWidth-2*margin)/4, 65); XPShareView *shareView = [[XPShareView alloc] initWithItems:items itemSize:itemSize shareInfo:shareInfo]; shareView.delegate = self; [TTPopup popupView:shareView style:TTPopupStyleActionSheet]; } ///保存一下分享的内容的 不需要处理错误码 - (void)saveShare:(XPShareInfoModel *)shareInfo { NSMutableDictionary *params = [NSMutableDictionary dictionary]; NSString *uid = [AccountInfoStorage instance].getUid; NSString *ticket = [AccountInfoStorage instance].getTicket; [params safeSetObject:uid forKey:@"uid"]; [params safeSetObject:@(shareInfo.shareType) forKey:@"shareType"]; [params safeSetObject:ticket forKey:@"ticket"]; [params safeSetObject:@(shareInfo.type) forKey:@"sharePageId"]; if (shareInfo.shareUrl.length > 0) { [params safeSetObject:shareInfo.shareUrl forKey:@"shareUrl"]; } if (shareInfo.roomUid > 0) { [params safeSetObject:@(shareInfo.roomUid) forKey:@"targetUid"]; } [HttpRequestHelper POST:@"usershare/save" params:params success:^(BaseModel * _Nonnull data) { } failure:^(NSInteger resCode, NSString * _Nonnull message) { }]; } - (void)collectButtonAction:(UIButton *)sender { NSString * type = sender.selected ? @"2" : @"1"; NSString * uid = [AccountInfoStorage instance].getUid; NSString * roomUid = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; [Api collectRoom:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { sender.selected= !sender.selected; if ([type isEqualToString:@"1"]) {///收藏的话 [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_collect_icon_click eventAttributes:@{@"roomUid" : @(self.hostDelegate.getRoomInfo.uid)}]; [XCHUDTool showSuccessWithMessage:@"收藏成功"]; sender.hidden = YES; if (self.hadShowCollectInScreen) { return; } self.hadShowCollectInScreen = YES; NSMutableDictionary * dic = [NSMutableDictionary dictionary]; [dic safeSetObject:[AccountInfoStorage instance].getUid forKey:@"uid"]; [dic safeSetObject:self.hostDelegate.getUserInfo.nick forKey:@"nick"]; [dic safeSetObject:[NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid] forKey:@"targetUid"]; [dic safeSetObject:self.hostDelegate.getRoomInfo.nick forKey:@"targetNick"]; NSDictionary * data = @{@"data":dic}; AttachmentModel *attachment = [[AttachmentModel alloc]init]; attachment.first = CustomMessageType_Collection_Room; attachment.second = Custom_Message_Sub_Collect_Room_Tips; attachment.data = data; NIMMessage *message = [[NIMMessage alloc]init]; NIMCustomObject *object = [[NIMCustomObject alloc] init]; object.attachment = attachment; message.messageObject = object; NSString *sessionId = [NSString stringWithFormat:@"%ld",self.hostDelegate.getRoomInfo.roomId]; //构造会话 NIMSession *session = [NIMSession session:sessionId type:NIMSessionTypeChatroom]; [[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session error:nil]; } } else { [XCHUDTool showErrorWithMessage:msg]; } } roomUid:roomUid uid:uid type:type roomUids:NULL]; } #pragma mark - XCShareViewDelegate - (void)shareView:(XPShareView *)shareView shareFail:(NSString *)message { [TTPopup dismiss]; [XCHUDTool showErrorWithMessage:message]; } - (void)shareView:(XPShareView *)shareView didSuccess:(XPShareInfoModel *)shareInfo{ [TTPopup dismiss]; [XCHUDTool showErrorWithMessage:@"分享成功"]; AttachmentModel * attachMent = [[AttachmentModel alloc] init]; attachMent.first = CustomMessageType_Room_Tip; attachMent.second = Custom_Message_Sub_Room_Tip_ShareRoom; NSMutableDictionary * dic = [NSMutableDictionary dictionary]; NSString * uid = [AccountInfoStorage instance].getUid; [dic safeSetObject:uid forKey:@"uid"]; NSMutableDictionary * userDic = [NSMutableDictionary dictionary]; UserInfoModel * userInfo = [self.hostDelegate getUserInfo]; RoomInfoModel * roomInfo = [self.hostDelegate getRoomInfo]; [userDic safeSetObject:roomInfo.nick.length > 0 ? roomInfo.nick : @"" forKey:@"targetNick"]; [userDic safeSetObject:@(roomInfo.uid) forKey:@"targetUid"]; [userDic safeSetObject:userInfo.nick.length > 0 ? userInfo.nick : @"" forKey:@"nick"]; [dic safeSetObject:userDic forKey:@"data"]; attachMent.data = dic; NSString *sessionID = [NSString stringWithFormat:@"%ld", [self.hostDelegate getRoomInfo].roomId]; NIMMessage *message = [[NIMMessage alloc]init]; NIMCustomObject *object = [[NIMCustomObject alloc] init]; object.attachment = attachMent; message.messageObject = object; //构造会话 NIMSession *session = [NIMSession session:sessionID type:NIMSessionTypeChatroom]; [[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session error:nil]; ///上报一下 [self saveShare:shareInfo]; } - (void)shareViewDidClickCancel:(XPShareView *)shareView { [TTPopup dismiss]; } #pragma mark - XPRoomRecommendViewDelegate - (void)xPRoomRecommendViewReport { [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_more_icon_click eventAttributes:@{@"reportRoom" : @(self.hostDelegate.getRoomInfo.uid)}]; [FFPopup dismissPopupForView:self.recommendRoomView animated:NO]; XPWebViewController * webVC = [[XPWebViewController alloc] init]; NSString *urlstr = [NSString stringWithFormat:@"%@?reportUid=%ld&source=ROOM", URLWithType(kReportRoomURL),self.hostDelegate.getRoomInfo.uid]; webVC.url = urlstr; [[self.hostDelegate getCurrentNav] pushViewController:webVC animated:YES]; } - (void)xPRoomRecommendViewMiniRoom { [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_more_icon_click eventAttributes:@{@"miniRoom" : @(self.hostDelegate.getRoomInfo.uid)}]; [TTPopup dismiss]; [FFPopup dismissPopupForView:self.recommendRoomView animated:NO]; [self.hostDelegate miniRoom]; } - (void)xPRoomRecommendViewExitRoom { [TTPopup dismiss]; [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_more_icon_click eventAttributes:@{@"exitRoom" : @(self.hostDelegate.getRoomInfo.uid)}]; [FFPopup dismissPopupForView:self.recommendRoomView animated:NO]; [self.hostDelegate exitRoom]; } - (void)xPRoomRecommendViewShare { [TTPopup dismiss]; [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_more_icon_click eventAttributes:@{@"shareRoom" : @(self.hostDelegate.getRoomInfo.uid)}]; [FFPopup dismissPopupForView:self.recommendRoomView animated:NO]; [self showSharePanel]; } - (void)xPRoomRecommendViewJumpToRoom:(NSString *)roomUid { [TTPopup dismiss]; [StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_more_icon_click eventAttributes:@{@"jumpToRoom" : roomUid}]; [FFPopup dismissPopupForView:self.recommendRoomView animated:NO]; [self.hostDelegate exitRoom]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [XPRoomViewController openRoom:roomUid viewController:[XCCurrentVCStackManager shareManager].getCurrentVC]; }); } #pragma mark - Getters And Setters - (UIButton *)backButton{ if (!_backButton) { _backButton = [[UIButton alloc] init]; [_backButton setImage:[UIImage imageNamed:@"room_info_back"] forState:UIControlStateNormal]; [_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside]; [_backButton setEnlargeEdgeWithTop:15 right:15 bottom:15 left:15]; } return _backButton; } - (UIButton *)settingButton { if (!_settingButton) { _settingButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_settingButton setImage:[UIImage imageNamed:@"room_info_setting"] forState:UIControlStateNormal]; [_settingButton addTarget:self action:@selector(settingButtonAction:) forControlEvents:UIControlEventTouchUpInside]; [_settingButton setEnlargeEdgeWithTop:8 right:8 bottom:8 left:8]; } return _settingButton; } - (UIButton *)collectButton { if (!_collectButton) { _collectButton = [UIButton buttonWithType:UIButtonTypeCustom]; _collectButton.backgroundColor = [ThemeColor colorWithHexString:@"#67D7D7"]; [_collectButton setTitle:@"收藏" forState:UIControlStateNormal]; [_collectButton setTitleColor:UIColor.whiteColor forState:UIControlStateNormal]; _collectButton.titleLabel.font = [UIFont systemFontOfSize:11 weight:UIFontWeightMedium]; _collectButton.layer.cornerRadius = 10; _collectButton.clipsToBounds = YES; [_collectButton addTarget:self action:@selector(collectButtonAction:) forControlEvents:UIControlEventTouchUpInside]; _collectButton.contentEdgeInsets = UIEdgeInsetsMake(0, 7, 0, 7); _collectButton.hidden = YES; } return _collectButton; } - (UIStackView *)nickStackView { if (!_nickStackView) { _nickStackView = [[UIStackView alloc] init]; _nickStackView.axis = UILayoutConstraintAxisVertical; _nickStackView.distribution = UIStackViewDistributionFill; _nickStackView.alignment = UIStackViewAlignmentLeading; } return _nickStackView; } - (UIStackView *)titleStackView { if (!_titleStackView) { _titleStackView = [[UIStackView alloc] init]; _titleStackView.axis = UILayoutConstraintAxisHorizontal; _titleStackView.distribution = UIStackViewDistributionFill; _titleStackView.alignment = UIStackViewAlignmentCenter; _titleStackView.spacing = 5; } return _titleStackView; } - (MarqueeLabel *)titleLabel{ if (!_titleLabel) { _titleLabel = [[MarqueeLabel alloc] init]; _titleLabel.scrollDuration = 8.0; _titleLabel.fadeLength = 6.0f; _titleLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium]; _titleLabel.textColor = [ThemeColor roomOwnerNickColor]; _titleLabel.userInteractionEnabled = YES; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onlineTapRecognizer)]; [_titleLabel addGestureRecognizer:tap]; } return _titleLabel; } - (UIImageView *)giftEffectImageView { if (!_giftEffectImageView) { _giftEffectImageView = [[UIImageView alloc] init]; _giftEffectImageView.userInteractionEnabled = YES; _giftEffectImageView.image = [UIImage imageNamed:@"room_info_gift_effect"]; } return _giftEffectImageView; } - (UIImageView *)lockRoomImageView { if (!_lockRoomImageView) { _lockRoomImageView = [[UIImageView alloc] init]; _lockRoomImageView.userInteractionEnabled = YES; _lockRoomImageView.image = [UIImage imageNamed:@"room_info_lock_room"]; _lockRoomImageView.hidden = YES; } return _lockRoomImageView; } - (UIStackView *)onlineStackView { if (!_onlineStackView) { _onlineStackView = [[UIStackView alloc] init]; _onlineStackView.axis = UILayoutConstraintAxisHorizontal; _onlineStackView.distribution = UIStackViewDistributionFill; _onlineStackView.alignment = UIStackViewAlignmentCenter; _onlineStackView.spacing = 2; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onlineTapRecognizer)]; [_onlineStackView addGestureRecognizer:tap]; } return _onlineStackView; } - (UIView *)greenDotView { if (!_greenDotView) { _greenDotView = [[UIView alloc] init]; _greenDotView.backgroundColor = [ThemeColor roomOnLineIdenColor]; _greenDotView.layer.masksToBounds = YES; _greenDotView.layer.cornerRadius = 1.5; } return _greenDotView; } - (YYLabel *)idLabel { if (!_idLabel) { _idLabel = [[YYLabel alloc] init]; _idLabel.textColor = [ThemeColor roomOwnerNickColor]; _idLabel.font = [UIFont systemFontOfSize:10]; } return _idLabel; } - (UILabel *)onLineLabel { if (!_onLineLabel) { _onLineLabel = [[UILabel alloc] init]; _onLineLabel.textColor = [ThemeColor roomOwnerNickColor]; _onLineLabel.font = [UIFont systemFontOfSize:10]; } return _onLineLabel; } - (XPRoomRecommendView *)recommendRoomView { if (!_recommendRoomView) { _recommendRoomView = [[XPRoomRecommendView alloc] init]; self.recommendRoomView.delegate = self; } return _recommendRoomView; } - (NetImageView *)avatarImageView { if (!_avatarImageView) { NetImageConfig * config = [[NetImageConfig alloc] init]; config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; config.imageType = ImageTypeUserIcon; _avatarImageView = [[NetImageView alloc] initWithConfig:config]; _avatarImageView.userInteractionEnabled = YES; _avatarImageView.layer.masksToBounds = YES; _avatarImageView.layer.cornerRadius = 17; _avatarImageView.contentMode = UIViewContentModeScaleAspectFill; // UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAvatarGuest)]; // [_avatarImageView addGestureRecognizer:tap]; } return _avatarImageView; } - (UIStackView *)nickBgStackView { if (!_nickBgStackView) { _nickBgStackView = [[UIStackView alloc] init]; _nickBgStackView.axis = UILayoutConstraintAxisHorizontal; _nickBgStackView.distribution = UIStackViewDistributionFill; _nickBgStackView.alignment = UIStackViewAlignmentCenter; _nickBgStackView.spacing = 4; _nickBgStackView.backgroundColor = [UIColor.whiteColor colorWithAlphaComponent:0.1]; _nickBgStackView.layer.cornerRadius = 17; } return _nickBgStackView; } - (UIView *)spaceView { if (!_spaceView) { _spaceView = [[UIView alloc] init]; } return _spaceView; } @end