feat: 公聊厅点击头像跳转到个人页
This commit is contained in:
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MSSessionPublicChatHallVC : MvpViewController
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
@@ -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];
|
||||
|
Reference in New Issue
Block a user