feat: 公聊厅点击头像跳转到个人页

This commit is contained in:
eggmanQQQ
2024-07-29 12:18:12 +08:00
parent e8dffabb2c
commit 2805f0d858
5 changed files with 137 additions and 93 deletions

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface MSSessionPublicChatHallVC : MvpViewController
@end
NS_ASSUME_NONNULL_END

View File

@@ -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<NIMMessage *> * _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<NIMMessage *> * _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<NIMMessage *> * _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];