From 2805f0d858a12ce0d13afc277fa2e1121dbd4f59 Mon Sep 17 00:00:00 2001 From: eggmanQQQ <3671373519@qq.com> Date: Mon, 29 Jul 2024 12:18:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=AC=E8=81=8A=E5=8E=85=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E5=A4=B4=E5=83=8F=E8=B7=B3=E8=BD=AC=E5=88=B0=E4=B8=AA?= =?UTF-8?q?=E4=BA=BA=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Content/MessageContentChatHallHeadView.h | 2 + .../Content/MessageContentChatHallHeadView.m | 28 ++- .../Content/SesssionModel/MessageBaseModel.h | 2 + .../View/Session/MSSessionPublicChatHallVC.h | 2 + .../View/Session/MSSessionPublicChatHallVC.m | 196 ++++++++++-------- 5 files changed, 137 insertions(+), 93 deletions(-) diff --git a/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.h b/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.h index 833519d9..874b0afb 100644 --- a/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.h +++ b/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.h @@ -10,8 +10,10 @@ NS_ASSUME_NONNULL_BEGIN @interface MessageContentChatHallHeadView : UIView + -(instancetype)initWithFrame:(CGRect)frame isSelf:(BOOL)isSelf; - (void)render:(nonnull MessageBaseModel *)model; + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.m b/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.m index 076decaa..d376bc45 100644 --- a/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.m +++ b/YuMi/Modules/YMMessage/View/Session/Content/MessageContentChatHallHeadView.m @@ -17,7 +17,11 @@ #import "MessageHeadlinesTextModel.h" #import "XPMessageRemoteExtModel.h" #import "MSSessionPublicChatHalImageModel.h" + @interface MessageContentChatHallHeadView() + +@property (nonatomic, strong) XPMessageRemoteExtModel *cellModel; + @property(nonatomic,assign) BOOL isSelf; ///头饰 @property (nonatomic,strong) YYAnimatedImageView *headWearImageView; @@ -123,6 +127,7 @@ } - (void)render:(nonnull MessageBaseModel *)model { + XPMessageRemoteExtModel *extModel ; if([model isKindOfClass:[MSSessionPublicChatHalImageModel class]]){ MSSessionPublicChatHalImageModel *imageModel = (MSSessionPublicChatHalImageModel *)model; @@ -131,8 +136,14 @@ MessageHeadlinesTextModel * textModel = (MessageHeadlinesTextModel *)model; extModel = textModel.extModel; } - - if(extModel == nil)return; + + self.cellModel = extModel; + self.cellModel.uid = @(model.uid).stringValue; + + if(extModel == nil) { + return; + } + @kWeakify(self); self.avatarView.image = nil; [self.avatarView loadImageWithUrl:extModel.avatar completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) { @@ -162,7 +173,6 @@ if (extModel.headWearType == 1 || [headwearUrl hasSuffix:@"svga"]) { self.headWearImageView.hidden = YES; self.headWearSVGAImageView.hidden = NO; -// [self.headWearSVGAImageView setImageName:headwearUrl]; [self.parser parseWithURL:[NSURL URLWithString:headwearUrl] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) { @kStrongify(self); self.headWearSVGAImageView.videoItem = videoItem; @@ -184,6 +194,14 @@ } } +- (void)handleTapAvatar { + + if (self.cellModel.uid.length > 0) { + [[NSNotificationCenter defaultCenter] postNotificationName:@"xpHandleTapAvatar" + object:nil + userInfo:@{@"user erban no.": self.cellModel.uid}]; + } +} #pragma mark - 懒加载 - (NetImageView *)avatarView{ if(!_avatarView){ @@ -192,6 +210,9 @@ _avatarView = [[NetImageView alloc]initWithConfig:config]; _avatarView.layer.cornerRadius = kGetScaleWidth(48)/2; _avatarView.layer.masksToBounds = YES; + _avatarView.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapAvatar)]; + [_avatarView addGestureRecognizer:tap]; } return _avatarView; } @@ -208,6 +229,7 @@ _headWearImageView = [[YYAnimatedImageView alloc] init]; _headWearImageView.backgroundColor = [UIColor clearColor]; _headWearImageView.contentMode = UIViewContentModeScaleAspectFit; + _headWearImageView.userInteractionEnabled = NO; } return _headWearImageView; } diff --git a/YuMi/Modules/YMMessage/View/Session/Content/SesssionModel/MessageBaseModel.h b/YuMi/Modules/YMMessage/View/Session/Content/SesssionModel/MessageBaseModel.h index 9f14bf65..d93048b0 100644 --- a/YuMi/Modules/YMMessage/View/Session/Content/SesssionModel/MessageBaseModel.h +++ b/YuMi/Modules/YMMessage/View/Session/Content/SesssionModel/MessageBaseModel.h @@ -46,6 +46,8 @@ typedef NS_ENUM(NSInteger, SessionMessageType) { @property (nonatomic,assign) BOOL isHiddenAvatar; ///消息的类型 @property (nonatomic,assign) SessionMessageType messageType; + +@property (nonatomic, assign) NSInteger uid; ///初始化一个message - (instancetype)initWithMessage:(NIMMessage *)message; diff --git a/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.h b/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.h index bb28ee60..ce6098f6 100644 --- a/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.h +++ b/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.h @@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN @interface MSSessionPublicChatHallVC : MvpViewController + + @end NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.m b/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.m index 9047b294..00f9a13d 100644 --- a/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.m +++ b/YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.m @@ -94,31 +94,54 @@ - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; - [Api requestRecordIncome:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { - if(code == 200){ - XPIncomeRecordModel *model = [XPIncomeRecordModel modelWithDictionary:data.data]; - self.myCoins = @(model.diamonds).stringValue; - } - }]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; self.isLoadHistoryMessage = YES; + [self initViews]; [self initLayout]; [self initHeaderAndFooterRrfresh]; + [IQKeyboardManager sharedManager].enable = NO; [IQKeyboardManager sharedManager].enableAutoToolbar = NO; [[NIMSDK sharedSDK].chatManager addDelegate:self]; + + [self updateCoins]; + + @kWeakify(self); + [[NSNotificationCenter defaultCenter] addObserverForName:@"xpHandleTapAvatar" + object:nil + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification * _Nonnull notification) { + @kStrongify(self); + NSNumber *userUrbanID = [notification.userInfo objectForKey:@"user erban no."]; + if (userUrbanID) { + XPMineUserInfoViewController * infoVC = [[XPMineUserInfoViewController alloc] init]; + infoVC.uid = userUrbanID.integerValue; + [[self getKeyWindowNav] pushViewController:infoVC animated:YES]; + } + }]; } - (void)initHeaderAndFooterRrfresh { [self initData]; } +- (void)updateCoins { + @kWeakify(self); + [Api requestRecordIncome:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { + @kStrongify(self); + if(code == 200){ + XPIncomeRecordModel *model = [XPIncomeRecordModel modelWithDictionary:data.data]; + self.myCoins = @(model.diamonds).stringValue; + } + }]; +} + #pragma mark - 提前加载相册中的图片 - (void)loadAlbumPhotos { [YYUtility checkAssetsLibrayAvailable:^{} denied:^{} restriction:^{}]; @@ -141,6 +164,7 @@ model = [[MessageUnSupportModel alloc] initWithMessage:message]; break; } + model.uid = message.from.integerValue; return model; } - (MessageBaseModel *)modelTransformCustomMessage:(NIMMessage *)message { @@ -324,17 +348,13 @@ } - (void)sendPublicChatHallTopTextSuccess{ - [Api requestRecordIncome:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { - if(code == 200){ - XPIncomeRecordModel *model = [XPIncomeRecordModel modelWithDictionary:data.data]; - self.myCoins = @(model.diamonds).stringValue; - } - }]; + [self updateCoins]; } -(void)getPublicChatHallTopTextPayMoneySuccess:(NSString *)money{ self.releaseCoins = money; } + - (void)getPublicChatHallTopTextSuccess:(MSSessionPublicChatHallTopModel *)model{ self.headView.topModel = model; @@ -388,92 +408,89 @@ option.startTime = 0; option.order = NIMMessageSearchOrderAsc; option.messageTypes = @[@(NIMMessageTypeText),@(NIMMessageTypeImage)]; + + @kWeakify(self); [[NIMSDK sharedSDK].chatroomManager fetchMessageHistory:roomId option:option result:^(NSError * _Nullable error, NSArray * _Nullable messages) { + @kStrongify(self); if(error != nil){ self.isLoadHistoryMessage = NO; } - //如果拉取的数量等于请求的数量,说明这个时间点以后的消息数量大于等于需要拉取的数量,直接拉取最新的50条 - if (messages.count == 100) { - NIMHistoryMessageSearchOption *option = [[NIMHistoryMessageSearchOption alloc] init]; - option.limit = 100; - option.order = NIMMessageSearchOrderDesc; - option.messageTypes = @[@(NIMMessageTypeText),@(NIMMessageTypeImage)]; - [[NIMSDK sharedSDK].chatroomManager fetchMessageHistory:roomId option:option result:^(NSError * _Nullable error, NSArray * _Nullable messages) { - if(error != nil){ - self.isLoadHistoryMessage = NO; - } - [self hideHUD]; - dispatch_async(dispatch_get_main_queue(), ^{///回到主线程 - if (self.messages.count > kRoomMessageMaxLength) { - NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)]; - NSArray *needRemoveMsgArray = [self.messages objectsAtIndexes:set]; - [self.messages removeObjectsInArray:needRemoveMsgArray]; - }else{ - - for (NIMMessage *message in messages.reverseObjectEnumerator) { - [self addTimeMessage:message]; - if (message.isDeleted) { - continue; - } - if ([self isCanAddMsg:message]){ - [self addTimeMessage:message]; - MessageBaseModel * model = [self modeTransformMessage:message]; - [self.messages addObject:model]; - } - - } - } - // 执行插入 - - [self.sessionTableView reloadData]; - //执行插入动画并滚动 - if(self.messages.count > 0){ - NSIndexPath *ip = [NSIndexPath indexPathForRow:self.messages.count-1 inSection:0]; //取最后一行数据 - [self.sessionTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionBottom animated:YES]; //滚动到最后一行 - - } - }); - }]; - return; - } - - dispatch_async(dispatch_get_main_queue(), ^{///回到主线程 + //如果拉取的数量等于请求的数量,说明这个时间点以后的消息数量大于等于需要拉取的数量,直接拉取最新的50条 + if (messages.count == 100) { + NIMHistoryMessageSearchOption *option = [[NIMHistoryMessageSearchOption alloc] init]; + option.limit = 100; + option.order = NIMMessageSearchOrderDesc; + option.messageTypes = @[@(NIMMessageTypeText),@(NIMMessageTypeImage)]; + [[NIMSDK sharedSDK].chatroomManager fetchMessageHistory:roomId option:option result:^(NSError * _Nullable error, NSArray * _Nullable messages) { + if(error != nil){ + self.isLoadHistoryMessage = NO; + } [self hideHUD]; - if (self.messages.count > kRoomMessageMaxLength) { - NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)]; - NSArray *needRemoveMsgArray = [self.messages objectsAtIndexes:set]; - [self.messages removeObjectsInArray:needRemoveMsgArray]; - }else{ - - for (NIMMessage *message in messages) { - [self addTimeMessage:message]; - if (message.isDeleted) { - continue; - } - if ([self isCanAddMsg:message]){ + dispatch_async(dispatch_get_main_queue(), ^{///回到主线程 + if (self.messages.count > kRoomMessageMaxLength) { + NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)]; + NSArray *needRemoveMsgArray = [self.messages objectsAtIndexes:set]; + [self.messages removeObjectsInArray:needRemoveMsgArray]; + }else{ + + for (NIMMessage *message in messages.reverseObjectEnumerator) { [self addTimeMessage:message]; - MessageBaseModel * model = [self modeTransformMessage:message]; - [self.messages addObject:model]; + if (message.isDeleted) { + continue; + } + if ([self isCanAddMsg:message]){ + [self addTimeMessage:message]; + MessageBaseModel * model = [self modeTransformMessage:message]; + [self.messages addObject:model]; + } + } - + } + // 执行插入 + + [self.sessionTableView reloadData]; + //执行插入动画并滚动 + if(self.messages.count > 0){ + NSIndexPath *ip = [NSIndexPath indexPathForRow:self.messages.count-1 inSection:0]; //取最后一行数据 + [self.sessionTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionBottom animated:YES]; //滚动到最后一行 + + } + }); + }]; + return; + } + + dispatch_async(dispatch_get_main_queue(), ^{///回到主线程 + [self hideHUD]; + if (self.messages.count > kRoomMessageMaxLength) { + NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)]; + NSArray *needRemoveMsgArray = [self.messages objectsAtIndexes:set]; + [self.messages removeObjectsInArray:needRemoveMsgArray]; + }else{ + for (NIMMessage *message in messages) { + [self addTimeMessage:message]; + if (message.isDeleted) { + continue; + } + if ([self isCanAddMsg:message]){ + [self addTimeMessage:message]; + MessageBaseModel * model = [self modeTransformMessage:message]; + [self.messages addObject:model]; } } - // 执行插入 - - [self.sessionTableView reloadData]; - //执行插入动画并滚动 - if(self.messages.count > 0){ - NSIndexPath *ip = [NSIndexPath indexPathForRow:self.messages.count-1 inSection:0]; //取最后一行数据 - [self.sessionTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionBottom animated:YES]; //滚动到最后一行 - - } - }); - - + } + // 执行插入 + + [self.sessionTableView reloadData]; + //执行插入动画并滚动 + if(self.messages.count > 0){ + NSIndexPath *ip = [NSIndexPath indexPathForRow:self.messages.count-1 inSection:0]; //取最后一行数据 + [self.sessionTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionBottom animated:YES]; //滚动到最后一行 + + } + }); }]; - - } #pragma mark - MessageCellDelegate @@ -566,7 +583,6 @@ } cell.delegate = self; [cell renderWithMessage:[self.messages xpSafeObjectAtIndex:indexPath.row]]; - [cell renderWithMessage:[self.messages xpSafeObjectAtIndex:indexPath.row]]; return cell; } break; @@ -575,8 +591,8 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ - MessageBaseModel *m = [self.messages xpSafeObjectAtIndex:indexPath.row]; - NSLog(@"%@",m.message.remoteExt); +// MessageBaseModel *m = [self.messages xpSafeObjectAtIndex:indexPath.row]; +// NSLog(@"%@", m.message.remoteExt); } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self.keyboardManager hideAllBoardView];