YOUPAILCCellLayoutConfig.m 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. //
  2. // YOUPAILCCellLayoutConfig.m
  3. // LiveChat
  4. //
  5. // Created by 张灿 on 2018/9/22.
  6. // Copyright © 2018年 caicai. All rights reserved.
  7. //
  8. #import "YOUPAILCCellLayoutConfig.h"
  9. #import "YOUPAILCSessionCustomContentConfig.h"
  10. #import "YOUPAIFateTextAttachment.h"
  11. @interface YOUPAILCCellLayoutConfig ()
  12. @property (nonatomic,strong) NSArray *types;
  13. @property (nonatomic,strong) YOUPAILCSessionCustomContentConfig *sessionCustomconfig;
  14. @end
  15. @implementation YOUPAILCCellLayoutConfig
  16. - (instancetype)init
  17. {
  18. if (self = [super init])
  19. {
  20. _types = @[
  21. @"YOUPAILCGiftAttachment",
  22. @"YOUPAILCOneImageAttachment",
  23. @"YOUPAILCMultiImageAttachment",
  24. @"YOUPAILCMessageTxtAttachment",
  25. @"YOUPAILCCallAttachment",
  26. @"YOUPAILPFollowAttachment",
  27. @"YOUPAIZhaPianTextAttachment",
  28. @"YOUPAIZhaPianTextAttachment2",
  29. @"YOUPAIFateTextAttachment"
  30. ];
  31. _sessionCustomconfig = [[YOUPAILCSessionCustomContentConfig alloc] init];
  32. }
  33. return self;
  34. }
  35. #pragma mark - NIMCellLayoutConfig
  36. - (CGSize)contentSize:(NIMMessageModel *)model cellWidth:(CGFloat)width{
  37. NIMMessage *message = model.message;
  38. //检查是不是当前支持的自定义消息类型
  39. if ([self isSupportedCustomMessage:message]) {
  40. return [_sessionCustomconfig contentSize:width message:message];
  41. }
  42. //如果没有特殊需求,就走默认处理流程
  43. return [super contentSize:model
  44. cellWidth:width];
  45. }
  46. - (NSString *)cellContent:(NIMMessageModel *)model{
  47. NIMMessage *message = model.message;
  48. //检查是不是当前支持的自定义消息类型
  49. if ([self isSupportedCustomMessage:message]) {
  50. return [_sessionCustomconfig cellContent:message];
  51. }
  52. //如果没有特殊需求,就走默认处理流程
  53. return [super cellContent:model];
  54. }
  55. - (UIEdgeInsets)contentViewInsets:(NIMMessageModel *)model
  56. {
  57. NIMMessage *message = model.message;
  58. //检查是不是当前支持的自定义消息类型
  59. if ([self isSupportedCustomMessage:message]) {
  60. return [_sessionCustomconfig contentViewInsets:message];
  61. }
  62. //如果没有特殊需求,就走默认处理流程
  63. return [super contentViewInsets:model];
  64. }
  65. - (UIEdgeInsets)cellInsets:(NIMMessageModel *)model
  66. {
  67. NIMMessage *message = model.message;
  68. //检查是不是聊天室消息
  69. if (message.session.sessionType == NIMSessionTypeChatroom) {
  70. return UIEdgeInsetsZero;
  71. }
  72. NIMCustomObject *object = (NIMCustomObject*)model.message.messageObject;
  73. if([object isKindOfClass:[NIMCustomObject class]] &&
  74. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCOneImageAttachment"]){
  75. return UIEdgeInsetsMake(10, 15, 10, 15);
  76. }
  77. if([object isKindOfClass:[NIMCustomObject class]] &&
  78. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMultiImageAttachment"]){
  79. return UIEdgeInsetsMake(10, 15, 10, 15);
  80. }
  81. if([object isKindOfClass:[NIMCustomObject class]] &&
  82. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMessageTxtAttachment"]){
  83. return UIEdgeInsetsMake(10, 0, 0, 0);
  84. }
  85. if([object isKindOfClass:[NIMCustomObject class]] &&
  86. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILPFollowAttachment"]){
  87. return UIEdgeInsetsMake(10, 0, 0, 0);
  88. }
  89. // if([object isKindOfClass:[NIMCustomObject class]] &&
  90. // [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCGiftAttachment"]){
  91. // return UIEdgeInsetsMake(10, KScreenWidth/2-125, 10, KScreenWidth/2-125);
  92. // }
  93. //如果没有特殊需求,就走默认处理流程
  94. return [super cellInsets:model];
  95. }
  96. - (BOOL)shouldShowAvatar:(NIMMessageModel *)model
  97. {
  98. if ([self isSupportedChatroomMessage:model.message]) {
  99. return NO;
  100. }
  101. // if ([self isSupportedChatroomMessage:model.message]) {
  102. // return NO;
  103. // }
  104. NIMCustomObject *object = (NIMCustomObject*)model.message.messageObject;
  105. if([object isKindOfClass:[NIMCustomObject class]] &&
  106. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCOneImageAttachment"]){
  107. return NO;
  108. }
  109. if([object isKindOfClass:[NIMCustomObject class]] &&
  110. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMultiImageAttachment"]){
  111. return NO;
  112. }
  113. if([object isKindOfClass:[NIMCustomObject class]] &&
  114. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMessageTxtAttachment"]){
  115. return NO;
  116. }
  117. if([object isKindOfClass:[NIMCustomObject class]] &&
  118. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILPFollowAttachment"]){
  119. return NO;
  120. }
  121. if([object isKindOfClass:[NIMCustomObject class]] &&
  122. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAIZhaPianTextAttachment"]){
  123. return NO;
  124. }
  125. if([object isKindOfClass:[NIMCustomObject class]] &&
  126. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAIZhaPianTextAttachment2"]){
  127. return NO;
  128. }
  129. if([object isKindOfClass:[NIMCustomObject class]] &&
  130. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAIFateTextAttachment"]){
  131. return NO;
  132. }
  133. // if([object isKindOfClass:[NIMCustomObject class]] &&
  134. // [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCGiftAttachment"]){
  135. // return YES;
  136. // }
  137. return [super shouldShowAvatar:model];
  138. }
  139. - (BOOL)shouldShowLeft:(NIMMessageModel *)model{
  140. if ([self isSupportedChatroomMessage:model.message]) {
  141. return YES;
  142. }
  143. NIMCustomObject *object = (NIMCustomObject*)model.message.messageObject;
  144. if([object isKindOfClass:[NIMCustomObject class]] &&
  145. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCOneImageAttachment"]){
  146. return YES;
  147. }
  148. if([object isKindOfClass:[NIMCustomObject class]] &&
  149. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMultiImageAttachment"]){
  150. return YES;
  151. }
  152. if([object isKindOfClass:[NIMCustomObject class]] &&
  153. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCMessageTxtAttachment"]){
  154. return YES;
  155. }
  156. if([object isKindOfClass:[NIMCustomObject class]] &&
  157. [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILPFollowAttachment"]){
  158. return YES;
  159. }
  160. // if([object isKindOfClass:[NIMCustomObject class]] &&
  161. // [NSStringFromClass([object.attachment class]) isEqualToString:@"YOUPAILCGiftAttachment"]){
  162. // return YES;
  163. // }
  164. return [super shouldShowLeft:model];
  165. }
  166. - (BOOL)shouldShowNickName:(NIMMessageModel *)model{
  167. if ([self isSupportedChatroomMessage:model.message]) {
  168. return YES;
  169. }
  170. return [super shouldShowNickName:model];
  171. }
  172. - (CGFloat)nickNameMargin:(NIMMessageModel *)model{
  173. if ([self isSupportedChatroomMessage:model.message]) {
  174. NSDictionary *ext = model.message.remoteExt;
  175. NIMChatroomMemberType type = [ext[@"type"] integerValue];
  176. switch (type) {
  177. case NIMChatroomMemberTypeManager:
  178. case NIMChatroomMemberTypeCreator:
  179. return 50.f;
  180. default:
  181. break;
  182. }
  183. return 15.f;
  184. }
  185. return [super nickNameMargin:model].x;
  186. }
  187. - (NSArray *)customViews:(NIMMessageModel *)model
  188. {
  189. if ([self isSupportedChatroomMessage:model.message]) {
  190. NSDictionary *ext = model.message.remoteExt;
  191. NIMChatroomMemberType type = [ext[@"type"] integerValue];
  192. NSString *imageName;
  193. switch (type) {
  194. case NIMChatroomMemberTypeManager:
  195. imageName = @"chatroom_role_manager";
  196. break;
  197. case NIMChatroomMemberTypeCreator:
  198. imageName = @"chatroom_role_master";
  199. break;
  200. default:
  201. break;
  202. }
  203. UIImageView *imageView;
  204. if (imageName.length) {
  205. UIImage *image = [UIImage imageNamed:imageName];
  206. imageView = [[UIImageView alloc] initWithImage:image];
  207. CGFloat leftMargin = 15.f;
  208. CGFloat topMatgin = 0.f;
  209. CGRect frame = imageView.frame;
  210. frame.origin = CGPointMake(leftMargin, topMatgin);
  211. imageView.frame = frame;
  212. }
  213. return imageView ? @[imageView] : nil;
  214. }
  215. return [super customViews:model];
  216. }
  217. #pragma mark - misc
  218. - (BOOL)isSupportedCustomMessage:(NIMMessage *)message
  219. {
  220. NIMCustomObject *object = message.messageObject;
  221. return [object isKindOfClass:[NIMCustomObject class]] &&
  222. [_types indexOfObject:NSStringFromClass([object.attachment class])] != NSNotFound;
  223. }
  224. - (BOOL)isSupportedChatroomMessage:(NIMMessage *)message
  225. {
  226. return message.session.sessionType == NIMSessionTypeChatroom &&
  227. (message.messageType == NIMMessageTypeText || [self isSupportedCustomMessage:message]);
  228. }
  229. - (BOOL)isChatroomTextMessage:(NIMMessage *)message
  230. {
  231. return message.session.sessionType == NIMSessionTypeChatroom &&
  232. message.messageObject == NIMMessageTypeText;
  233. }
  234. @end