123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- //
- // 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
|