// // XPRoomMessageParser.m // xplan-ios // // Created by 冯硕 on 2021/10/26. // #import "XPRoomMessageParser.h" #import #import #import ///Tool #import "ThemeColor+Room.h" #import "XPRoomMessageConstant.h" #import "AccountInfoStorage.h" #import "XPMacro.h" #import "XPGiftStorage.h" ///Model #import "XPMessageRemoteExtModel.h" #import "AttachMentModel.h" #import "GiftReceiveInfoModel.h" #import "XPKickUserModel.h" #import "MicroQueueModel.h" #import "UserInfoModel.h" #import "MicroStateModel.h" #import "RoomInfoModel.h" #import "NetImageView.h" #import "XPUserCardViewController.h" @implementation XPRoomMessageParser - (NSAttributedString*)parseMessageAttribute:(NIMMessage *)message { NIMMessageType messageType = message.messageType; switch (messageType) { case NIMMessageTypeText: return [self makeChatAttribute:message]; case NIMMessageTypeTip: return [self makeTipsAttribute:message]; case NIMMessageTypeNotification: return [self makeNotificationAttribute:message]; case NIMMessageTypeCustom: return [self makeCustomAttribute:message]; default: return nil; } } /// 用户公屏聊天 - (NSAttributedString *)makeCustomAttribute:(NIMMessage *)message { NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; AttachmentModel *attachment = (AttachmentModel *)obj.attachment; XPMessageRemoteExtModel * model = [XPMessageRemoteExtModel modelWithJSON:message.remoteExt[message.from]]; int first = attachment.first; if (first == CustomMessageType_Gift) {///单人送 return [self createSendGiftAttribute:attachment sendInfo:model]; } else if(first == CustomMessageType_AllMicroSend) {///全麦送 多人送 return [self createBatchMicroSendGiftAttribute:attachment sendInfo:model]; } else if(first == CustomMessageType_Room_Tip) {///分享/收藏房间 return [self createShareOrAttentionRoomAttribute:attachment sendInfo:model uid:message.from]; } else if(first == CustomMessageType_Kick_User || first == CustomMessageType_Queue) { XPKickUserModel * kickModel = [XPKickUserModel modelWithJSON:attachment.data]; return [self createKickUserAttribute:attachment info:kickModel]; } else if(first == CustomMessageType_Candy_Tree ) {//糖果树 return [self createCandyTreeHighLevelAttribute:attachment]; } return nil; } /// @param message 消息的实体 - (NSAttributedString*)makeChatAttribute:(NIMMessage *)message{ NSString * uid = [AccountInfoStorage instance].getUid; XPMessageRemoteExtModel * model = [XPMessageRemoteExtModel modelWithJSON:message.remoteExt[message.from]]; NSString * nick = [NSString stringWithFormat:@"%@:", ((NIMMessageChatroomExtension *)message.messageExt).roomNickname]; if ([message.from isEqualToString:uid]) { nick = @"我:"; } NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; ///官方新用户 [attribute appendAttributedString:[self createOfficalAndNewuserAttribute:model.defUser newUser:model.newUser]]; if (model.experUrl) { [attribute appendAttributedString:[self createUrlImageAttribute:model.experUrl]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } if (model.inRoomNameplatePic.length > 0 && model.inRoomNameplateWord.length > 0) { [attribute appendAttributedString:[self createNameplateAttibute:model.inRoomNameplateWord image:model.inRoomNameplatePic textFont:[UIFont systemFontOfSize:9]]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } [attribute appendAttributedString:[self createTextAttribute:nick color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; [attribute appendAttributedString:[self createTextAttribute:message.text color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; [self attributeAddHihtLight:attribute uid:message.from.integerValue]; return attribute; } /// 房间tips消息 /// @param message 消息的实体 - (NSAttributedString*)makeTipsAttribute:(NIMMessage *)message { return [self createTextAttribute:message.text color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]; } /// 房间通知类消息 /// @param message 消息的实体 - (NSAttributedString*)makeNotificationAttribute:(NIMMessage *)message { NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject; NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content; NIMChatroomNotificationMember *member = content.targets[0]; NIMMessageChatroomExtension * messageExt = (NIMMessageChatroomExtension *)message.messageExt; switch (content.eventType) { case NIMChatroomEventTypeEnter:///进入房间 { NSString* nick = member.nick.length > 0 ? member.nick : @""; NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; NSDictionary * dic = [(NSDictionary *)messageExt.roomExt.toJSONObject objectForKey:message.from]; XPMessageRemoteExtModel * extModel = [XPMessageRemoteExtModel modelWithDictionary:dic]; if (extModel.inRoomNameplatePic.length > 0 && extModel.inRoomNameplateWord.length > 0) { [attribute appendAttributedString:[self createNameplateAttibute:extModel.inRoomNameplateWord image:extModel.inRoomNameplatePic textFont:[UIFont systemFontOfSize:9]]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } [attribute appendAttributedString:[self createTextAttribute:nick color:[ThemeColor messageNickColor] font:kRoomMessageDefalutFont]]; if (extModel.carName.length > 0) { [attribute appendAttributedString:[self createTextAttribute:@" 驾着 " color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createTextAttribute:extModel.carName color:[ThemeColor messageNickColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } [attribute appendAttributedString:[self createTextAttribute:@"进入了房间" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [self attributeAddHihtLight:attribute uid:message.from.integerValue]; return attribute; } case NIMChatroomEventTypeInfoUpdated:///房间信息更新 return [self createRoomInfoUpdateAttribute:content.notifyExt]; default: return nil; } } #pragma mark - 房间信息更新 ///房间信息更新 - (NSAttributedString*)createRoomInfoUpdateAttribute:(NSString *)notifyExt { return nil; } #pragma mark - 糖果树公屏消息 - (NSAttributedString *)createCandyTreeHighLevelAttribute:(AttachmentModel *)attachment { NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; //action [attribute appendAttributedString:[self createTextAttribute:@"厉害了 " color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; NSInteger uid = 0; if ([attachment.data[@"uid"] isKindOfClass:[NSNumber class]]) { uid = ((NSNumber *)attachment.data[@"uid"]).integerValue; } else if ([attachment.data[@"uid"] isKindOfClass:[NSString class]]) { uid = ((NSString *)attachment.data[@"uid"]).integerValue; } [attribute appendAttributedString:[self createTextAttribute:attachment.data[@"nick"] color:[ThemeColor messageNickColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createTextAttribute:@"摘下糖果获得" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createTextAttribute:attachment.data[@"prizeName"] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createTextAttribute:[NSString stringWithFormat:@" x %@", attachment.data[@"prizeNum"]] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; [self attributeAddHihtLight:attribute uid:uid]; return attribute; } #pragma mark - 踢出房间/拉黑/下麦 - (NSAttributedString *)createKickUserAttribute:(AttachmentModel *)attachment info:(XPKickUserModel *)info { NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; [attribute appendAttributedString:[self createNickAtrribute:info.targetNick uid:info.targetUid]]; [attribute appendAttributedString:[self createTextAttribute:@"被" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createNickAtrribute:info.handleNick uid:info.handleUid]]; NSString * content= @""; if (attachment.second == Custom_Message_Sub_Kick_BeKicked) { content = @"请出房间"; } else if(attachment.second == Custom_Message_Sub_Kick_BlackList) { content = @"关进小黑屋"; } else if(attachment.second == Custom_Message_Sub_Queue_Kick) { content = @"请下麦"; } [attribute appendAttributedString:[self createTextAttribute:content color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; return attribute; } #pragma mark - 收藏房间和分享房间 - (NSAttributedString *)createShareOrAttentionRoomAttribute:(AttachmentModel *)attachment sendInfo:(XPMessageRemoteExtModel *)sendInfo uid:(NSString *)uid { NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; NSDictionary *data = attachment.data[@"data"]; NSString *nick = [NSString stringWithFormat:@"%@",data[@"nick"]]; [attribute appendAttributedString:[self createTextAttribute:nick color:[ThemeColor messageNickColor] font:kRoomMessageDefalutFont]]; NSString *tipString = @""; if (attachment.second == Custom_Message_Sub_Room_Tip_ShareRoom) { tipString = @"分享了房间"; }else if (attachment.second == Custom_Message_Sub_Room_Tip_Attention_Owner) { tipString = @"关注了房主"; } [attribute appendAttributedString:[self createTextAttribute:tipString color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [self attributeAddHihtLight:attribute uid:uid.integerValue]; return attribute; } #pragma mark - 送礼物的公屏 - (NSAttributedString *)createBatchMicroSendGiftAttribute:(AttachmentModel *)attachment sendInfo:(XPMessageRemoteExtModel *)sendInfo { NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; GiftReceiveInfoModel *info = [GiftReceiveInfoModel modelWithJSON:attachment.data]; GiftInfoModel *giftInfo = info.gift == nil ? info.giftInfo : info.gift; if (giftInfo == nil) { giftInfo = [[XPGiftStorage shareStorage] findGiftInfo:info.giftId]; } ///官方新用户 [attribute appendAttributedString:[self createOfficalAndNewuserAttribute:sendInfo.defUser newUser:sendInfo.newUser]]; //nick [attribute appendAttributedString:[self createNickAtrribute:info.nick uid:info.uid.integerValue]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; if (attachment.second == Custom_Message_Sub_AllBatchSend || attachment.second == Custom_Message_Sub_AllMicroSend) {///普通礼物 if (attachment.second == Custom_Message_Sub_AllBatchSend) { //打赏 [attribute appendAttributedString:[self createTextAttribute:@" 打赏 " color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; for (int i = 0; i < info.targetUsers.count; i++) { GiftReceiveUserInfoModel *targetInfo = [info.targetUsers objectAtIndex:i]; //nick [attribute appendAttributedString:[self createNickAtrribute:targetInfo.nick uid:targetInfo.uid]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; if (i < (info.targetUsers.count -1)) { //nick [attribute appendAttributedString:[self createTextAttribute:@"," color:[ThemeColor messageNickColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } } } else { //打赏 [attribute appendAttributedString:[self createTextAttribute:@" 全麦打赏 " color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } //img if (giftInfo.giftUrl) { [attribute appendAttributedString:[self createUrlImageAttribute:giftInfo.giftUrl]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } //x N [attribute appendAttributedString:[self createTextAttribute:[NSString stringWithFormat:@" X%ld",info.giftNum] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; } else if(attachment.second == Custom_Message_Sub_AllMicroLuckySend || attachment.second == Custom_Message_Sub_AllBatchMicroLuckySend) {///福袋礼物 //action NSString * sendTitle = @" 送出 "; if (attachment.second == Custom_Message_Sub_AllMicroLuckySend) { sendTitle = @" 全麦送出 "; } //打赏 [attribute appendAttributedString:[self createTextAttribute:sendTitle color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; // 福袋名称 [attribute appendAttributedString:[self createTextAttribute:info.giftName color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; // 福袋名称 [attribute appendAttributedString:[self createTextAttribute:@" 给 " color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; if (info.luckyGiftList) { //target [attribute appendAttributedString:[self createNickAtrribute:info.luckyGiftList.user.nick uid:info.luckyGiftList.user.uid]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; // 福袋名称 [attribute appendAttributedString:[self createTextAttribute:@" 爆出了 " color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; [info.luckyGiftList.giftList enumerateObjectsUsingBlock:^(GiftListsInfo * _Nonnull giftListInfo, NSUInteger idx, BOOL * _Nonnull stop) { GiftInfoModel *luckGiftInfo = [[XPGiftStorage shareStorage] findGiftInfo:[NSString stringWithFormat:@"%ld", giftListInfo.giftId]]; // 价值 [attribute appendAttributedString:[self createTextAttribute:@"价值" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; // 礼物价格 [attribute appendAttributedString:[self createTextAttribute:[NSString stringWithFormat:@"%ld",(NSInteger)luckGiftInfo.goldPrice] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; // 的礼物 [attribute appendAttributedString:[self createTextAttribute:@"钻石的礼物" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; //img [attribute appendAttributedString:[self createUrlImageAttribute:luckGiftInfo.giftUrl]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; //x N [attribute appendAttributedString:[self createTextAttribute: [NSString stringWithFormat:@" X%ld",giftListInfo.giftNum] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; if (info.luckyGiftList.giftList.count-1 != idx) { //, [attribute appendAttributedString:[self createTextAttribute:@"," color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; } }]; } } return attribute; } - (NSAttributedString *)createSendGiftAttribute:(AttachmentModel *)attachment sendInfo:(XPMessageRemoteExtModel *)sendInfo { NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; GiftReceiveInfoModel *info = [GiftReceiveInfoModel modelWithJSON:attachment.data]; GiftInfoModel *giftInfo = info.gift == nil ? info.giftInfo : info.gift; if (giftInfo == nil) { giftInfo = [[XPGiftStorage shareStorage] findGiftInfo:info.giftId]; } ///官方新用户 [attribute appendAttributedString:[self createOfficalAndNewuserAttribute:sendInfo.defUser newUser:sendInfo.newUser]]; //nick [attribute appendAttributedString:[self createNickAtrribute:info.nick uid:info.uid.integerValue]]; [attribute appendAttributedString:[self createSapceAttribute:2]];; if (attachment.second == Custom_Message_Sub_Gift_LuckySend) { //action [attribute appendAttributedString:[self createTextAttribute:@"送出" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; // 福袋名称 [attribute appendAttributedString:[self createTextAttribute:info.giftName color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createTextAttribute:@"给" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; //target [attribute appendAttributedString:[self createNickAtrribute:info.luckyGiftList.user.nick uid:info.luckyGiftList.user.uid]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; //lucky [attribute appendAttributedString:[self createTextAttribute:@"爆出了" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [info.luckyGiftList.giftList enumerateObjectsUsingBlock:^(GiftListsInfo * _Nonnull giftListInfo, NSUInteger idx, BOOL * _Nonnull stop) { GiftInfoModel *luckyGiftInfo = [[XPGiftStorage shareStorage] findGiftInfo:[NSString stringWithFormat:@"%ld", giftListInfo.giftId]]; // 价值 [attribute appendAttributedString: [self createTextAttribute:@"价值" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; // 礼物价格 [attribute appendAttributedString:[self createTextAttribute:[NSString stringWithFormat:@"%ld",(NSInteger)giftInfo.goldPrice] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; // 的礼物 [attribute appendAttributedString: [self createTextAttribute:@"钻石的礼物" color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; //img [attribute appendAttributedString:[self createUrlImageAttribute:luckyGiftInfo.giftUrl]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; //x N [attribute appendAttributedString:[self createTextAttribute: [NSString stringWithFormat:@" X%ld",giftListInfo.giftNum] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; if (info.luckyGiftList.giftList.count-1 != idx) { //, [attribute appendAttributedString: [self createTextAttribute:@"," color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; } }]; } else { //打赏 [attribute appendAttributedString:[self createTextAttribute:@" 打赏 " color:[ThemeColor messageDefaultTextColor] font:kRoomMessageDefalutFont]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; //target [attribute appendAttributedString: [self createNickAtrribute:info.targetNick uid:info.targetUid.integerValue]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; //img [attribute appendAttributedString:[self createUrlImageAttribute:giftInfo.giftUrl]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; //x N [attribute appendAttributedString:[self createTextAttribute:[NSString stringWithFormat:@" X%ld",info.giftNum] color:[ThemeColor messageTextColor] font:kRoomMessageDefalutFont]]; } return attribute; } #pragma mark - Commond Mehotd - (NSAttributedString *)createOfficalAndNewuserAttribute:(UserLevelType)levelType newUser:(BOOL)newUser { NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init]; //offical if (levelType == UserLevelType_Offical) { [attribute appendAttributedString: [self createLocalImageAttribute:@"common_offical"]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } if (newUser) { [attribute appendAttributedString: [self createLocalImageAttribute:@"common_new_user"]]; [attribute appendAttributedString:[self createSapceAttribute:2]]; } return attribute; } ///名字点击的 - (NSMutableAttributedString *)createNickAtrribute:(NSString *)nick uid:(NSInteger)uid { NSMutableAttributedString * attribute = [self createTextAttribute:nick color:[ThemeColor messageNickColor] font:kRoomMessageDefalutFont]; [self attributeAddHihtLight:attribute uid:uid]; return attribute; } - (void)attributeAddHihtLight:(NSMutableAttributedString *)attribute uid:(NSInteger)uid { @kWeakify(self); [attribute yy_setTextHighlightRange:NSMakeRange(0, attribute.length) color:nil backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { @kStrongify(self); if (uid <= 0) {return;} [self showUserCard:uid]; }]; } - (void)showUserCard:(NSInteger)uid { RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; NSString * targetUid = [NSString stringWithFormat:@"%ld", uid]; XPUserCardInfoModel * model = [[XPUserCardInfoModel alloc] init]; [[self.hostDelegate.getMicroQueue allValues] enumerateObjectsUsingBlock:^(MicroQueueModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (uid == obj.userInfo.uid) { model.position = [NSString stringWithFormat:@"%d", obj.microState.position]; model.posState = (UserCardMicroPosStateType)obj.microState.posState; model.micState = (UserCardMicroMicStateType)obj.microState.micState; *stop = YES; } }]; model.uid = targetUid; model.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; model.leaveMode = roomInfo.leaveMode; model.showGiftValue = roomInfo.showGiftValue; model.avatar = roomInfo.avatar; model.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid]; model.nick = self.hostDelegate.getUserInfo.nick; model.delegate = self.hostDelegate; XPUserCardViewController * userCardVC = [[XPUserCardViewController alloc] initWithUser:model]; [self.hostDelegate.getCurrentNav presentViewController:userCardVC animated:YES completion:nil]; } #pragma mark - private base methods ///铭牌 - (NSMutableAttributedString *)createNameplateAttibute:(NSString *)tagName image:(NSString *)imageName textFont:(UIFont *)textFont { NetImageConfig *config = [[NetImageConfig alloc]init]; ///先这样吧 config.autoLoad = YES; NetImageView *imageView = [[NetImageView alloc]initWithUrl:imageName config:config]; UIImage* image = imageView.image; if (image) { CGFloat scale = image.size.width / image.size.height; imageView.bounds = CGRectMake(0, 0, 20 * scale, 20); } else { NSURL *imgUrl = [NSURL URLWithString:imageName]; UIImage *myImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:imgUrl]]; CGFloat scale = myImage.size.width / myImage.size.height; if (scale == 0) { imageView.bounds = CGRectMake(0, 0, 60, 20); }else { imageView.bounds = CGRectMake(0, 0, 20* scale, 20); } } imageView.contentMode = UIViewContentModeScaleAspectFit; // 铭牌文字 UILabel *label = [[UILabel alloc] init]; label.textAlignment = NSTextAlignmentCenter; label.font = [UIFont boldSystemFontOfSize:12]; label.adjustsFontSizeToFitWidth = YES; label.textColor = UIColor.whiteColor; label.text = tagName; [imageView addSubview:label]; [label mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(27); make.right.mas_equalTo(-8); make.centerY.mas_equalTo(0); }]; NSMutableAttributedString *string = [NSMutableAttributedString yy_attachmentStringWithContent:imageView contentMode:UIViewContentModeScaleAspectFit attachmentSize:imageView.bounds.size alignToFont:[UIFont boldSystemFontOfSize:12] alignment:YYTextVerticalAlignmentCenter]; return string; } /// 生成一个图片的富文本 /// @param imageUrl 网络图片的地址 - (NSMutableAttributedString *)createUrlImageAttribute:(NSString *)imageUrl { NetImageConfig *config = [[NetImageConfig alloc]init]; ///先这样吧 config.autoLoad = YES; NetImageView *imageView = [[NetImageView alloc]initWithUrl:imageUrl config:config]; UIImage* image = imageView.image; if (image) { CGFloat scale = image.size.width / image.size.height; imageView.bounds = CGRectMake(0, 0, 20 * scale, 20); } else { imageView.bounds = CGRectMake(0, 0, 20, 20); } imageView.layer.masksToBounds = YES; imageView.contentMode = UIViewContentModeScaleAspectFit; NSMutableAttributedString * attrString = [NSMutableAttributedString yy_attachmentStringWithContent:imageView contentMode:UIViewContentModeScaleAspectFit attachmentSize:CGSizeMake(imageView.bounds.size.width, imageView.bounds.size.height) alignToFont:[UIFont systemFontOfSize:15.0] alignment:YYTextVerticalAlignmentCenter]; return attrString; } /// 生成本地一个图片的富文本 /// @param imageName 网络图片的地址 - (NSMutableAttributedString *)createLocalImageAttribute:(NSString *)imageName { if (imageName == nil && imageName.length <= 0) { return nil; } return [self createImageAttribute:[UIImage imageNamed:imageName]]; } /// 生成本地一个图片的富文本 /// @param image 本地的图片 - (NSMutableAttributedString *)createImageAttribute:(UIImage *)image { UIImageView *imaveView = [[UIImageView alloc]init]; imaveView.image = image; CGFloat scale = (CGFloat)imaveView.image.size.width / (CGFloat)imaveView.image.size.height; imaveView.bounds = CGRectMake(0, 0, 16 * scale, 16); NSMutableAttributedString * attrString = [NSMutableAttributedString yy_attachmentStringWithContent:imaveView contentMode:UIViewContentModeScaleAspectFit attachmentSize:CGSizeMake(imaveView.frame.size.width, imaveView.frame.size.height) alignToFont:[UIFont systemFontOfSize:15.0] alignment:YYTextVerticalAlignmentCenter]; return attrString; } /// 生成一个富文本 /// @param text 富文本的文字 /// @param color 文字的颜色 /// @param font 文字的大小 - (NSMutableAttributedString *)createTextAttribute:(NSString *)text color:(UIColor *)color font:(CGFloat)font { if (text == nil || text.length <= 0) { text = @""; } NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:text attributes:nil]; attribute.yy_font = [UIFont systemFontOfSize:font]; attribute.yy_color = color; attribute.yy_paragraphStyle = [self paragraphStyle]; return attribute; } /// 设置文本的样式 间隙 缩进 ... - (NSMutableParagraphStyle *)paragraphStyle { NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init]; paraStyle.lineSpacing = 4.0f;//行间距 // 强制排版(从左到右) paraStyle.alignment = NSTextAlignmentLeft; paraStyle.baseWritingDirection = NSWritingDirectionLeftToRight; return paraStyle; } /// 占位的富文本 /// @param width 需要的间隙 - (NSMutableAttributedString *)createSapceAttribute:(CGFloat)width { UIView *spaceView = [[UIView alloc]init]; spaceView.backgroundColor = [UIColor clearColor]; spaceView.bounds = CGRectMake(0, 0, width, 10); NSMutableAttributedString * attribute = [NSMutableAttributedString yy_attachmentStringWithContent:spaceView contentMode:UIViewContentModeScaleAspectFit attachmentSize:CGSizeMake(spaceView.frame.size.width, spaceView.frame.size.height) alignToFont:[UIFont systemFontOfSize:15.0] alignment:YYTextVerticalAlignmentCenter]; return attribute; } @end