// // YOUPAILCCellLayoutConfig.m // LiveChat // // Created by 张灿 on 2018/9/22. // Copyright © 2018年 caicai. All rights reserved. // #import "YOUPAILCCellLayoutConfig.h" #import "YOUPAILCSessionCustomContentConfig.h" #import "YOUPAIFateTextAttachment.h" @interface YOUPAILCCellLayoutConfig () @property (nonatomic,strong) NSArray *types; @property (nonatomic,strong) YOUPAILCSessionCustomContentConfig *sessionCustomconfig; @end @implementation YOUPAILCCellLayoutConfig - (instancetype)init { if (self = [super init]) { _types = @[ @"YOUPAILCGiftAttachment", @"YOUPAILCOneImageAttachment", @"YOUPAILCMultiImageAttachment", @"YOUPAILCMessageTxtAttachment", @"YOUPAILCCallAttachment", @"YOUPAILPFollowAttachment", @"YOUPAIZhaPianTextAttachment", @"YOUPAIZhaPianTextAttachment2", @"YOUPAIFateTextAttachment" ]; _sessionCustomconfig = [[YOUPAILCSessionCustomContentConfig alloc] init]; } return self; } #pragma mark - NIMCellLayoutConfig - (CGSize)contentSize:(NIMMessageModel *)model cellWidth:(CGFloat)width{ NIMMessage *message = model.message; //检查是不是当前支持的自定义消息类型 if ([self isSupportedCustomMessage:message]) { return [_sessionCustomconfig contentSize:width message:message]; } //如果没有特殊需求,就走默认处理流程 return [super contentSize:model cellWidth:width]; } - (NSString *)cellContent:(NIMMessageModel *)model{ NIMMessage *message = model.message; //检查是不是当前支持的自定义消息类型 if ([self isSupportedCustomMessage:message]) { return [_sessionCustomconfig cellContent:message]; } //如果没有特殊需求,就走默认处理流程 return [super cellContent:model]; } - (UIEdgeInsets)contentViewInsets:(NIMMessageModel *)model { NIMMessage *message = model.message; //检查是不是当前支持的自定义消息类型 if ([self isSupportedCustomMessage:message]) { return [_sessionCustomconfig contentViewInsets:message]; } //如果没有特殊需求,就走默认处理流程 return [super contentViewInsets:model]; } - (UIEdgeInsets)cellInsets:(NIMMessageModel *)model { NIMMessage *message = model.message; //检查是不是聊天室消息 if (message.session.sessionType == NIMSessionTypeChatroom) { return UIEdgeInsetsZero; } NIMCustomObject *object = (NIMCustomObject*)model.message.messageObject; if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCOneImageAttachment"]){ return UIEdgeInsetsMake(10, 15, 10, 15); } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMultiImageAttachment"]){ return UIEdgeInsetsMake(10, 15, 10, 15); } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMessageTxtAttachment"]){ return UIEdgeInsetsMake(10, 0, 0, 0); } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILPFollowAttachment"]){ return UIEdgeInsetsMake(10, 0, 0, 0); } // if([object isKindOfClass:[NIMCustomObject class]] && // [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCGiftAttachment"]){ // return UIEdgeInsetsMake(10, KScreenWidth/2-125, 10, KScreenWidth/2-125); // } //如果没有特殊需求,就走默认处理流程 return [super cellInsets:model]; } - (BOOL)shouldShowAvatar:(NIMMessageModel *)model { if ([self isSupportedChatroomMessage:model.message]) { return NO; } // if ([self isSupportedChatroomMessage:model.message]) { // return NO; // } NIMCustomObject *object = (NIMCustomObject*)model.message.messageObject; if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCOneImageAttachment"]){ return NO; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMultiImageAttachment"]){ return NO; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMessageTxtAttachment"]){ return NO; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILPFollowAttachment"]){ return NO; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAIZhaPianTextAttachment"]){ return NO; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAIZhaPianTextAttachment2"]){ return NO; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAIFateTextAttachment"]){ return NO; } // if([object isKindOfClass:[NIMCustomObject class]] && // [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCGiftAttachment"]){ // return YES; // } return [super shouldShowAvatar:model]; } - (BOOL)shouldShowLeft:(NIMMessageModel *)model{ if ([self isSupportedChatroomMessage:model.message]) { return YES; } NIMCustomObject *object = (NIMCustomObject*)model.message.messageObject; if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCOneImageAttachment"]){ return YES; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMultiImageAttachment"]){ return YES; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMessageTxtAttachment"]){ return YES; } if([object isKindOfClass:[NIMCustomObject class]] && [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILPFollowAttachment"]){ return YES; } // if([object isKindOfClass:[NIMCustomObject class]] && // [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCGiftAttachment"]){ // return YES; // } return [super shouldShowLeft:model]; } - (BOOL)shouldShowNickName:(NIMMessageModel *)model{ if ([self isSupportedChatroomMessage:model.message]) { return YES; } return [super shouldShowNickName:model]; } - (CGFloat)nickNameMargin:(NIMMessageModel *)model{ if ([self isSupportedChatroomMessage:model.message]) { NSDictionary *ext = model.message.remoteExt; NIMChatroomMemberType type = [ext[@"type"] integerValue]; switch (type) { case NIMChatroomMemberTypeManager: case NIMChatroomMemberTypeCreator: return 50.f; default: break; } return 15.f; } return [super nickNameMargin:model].x; } - (NSArray *)customViews:(NIMMessageModel *)model { if ([self isSupportedChatroomMessage:model.message]) { NSDictionary *ext = model.message.remoteExt; NIMChatroomMemberType type = [ext[@"type"] integerValue]; NSString *imageName; switch (type) { case NIMChatroomMemberTypeManager: imageName = @"chatroom_role_manager"; break; case NIMChatroomMemberTypeCreator: imageName = @"chatroom_role_master"; break; default: break; } UIImageView *imageView; if (imageName.length) { UIImage *image = [UIImage imageNamed:imageName]; imageView = [[UIImageView alloc] initWithImage:image]; CGFloat leftMargin = 15.f; CGFloat topMatgin = 0.f; CGRect frame = imageView.frame; frame.origin = CGPointMake(leftMargin, topMatgin); imageView.frame = frame; } return imageView ? @[imageView] : nil; } return [super customViews:model]; } #pragma mark - misc - (BOOL)isSupportedCustomMessage:(NIMMessage *)message { NIMCustomObject *object = message.messageObject; return [object isKindOfClass:[NIMCustomObject class]] && [_types indexOfObject:NSStringFromClass([object.attachment class])] != NSNotFound; } - (BOOL)isSupportedChatroomMessage:(NIMMessage *)message { return message.session.sessionType == NIMSessionTypeChatroom && (message.messageType == NIMMessageTypeText || [self isSupportedCustomMessage:message]); } - (BOOL)isChatroomTextMessage:(NIMMessage *)message { return message.session.sessionType == NIMSessionTypeChatroom && message.messageObject == NIMMessageTypeText; } @end