zoukankan      html  css  js  c++  java
  • 新浪微博客户端(51)-将表情图片转换为文本

    DJEmotionTextView 转换方法

    - (NSMutableString *)fullText {
    
        NSMutableString *text = [[NSMutableString alloc] init];
        // 遍历当前attributedText,此API会自动分割attributedText中存在的文本,Emoji,表情,且每遍历一次会调用usingBlock,block中传入的
        // attrs,range 分别代表文本或表情的属性和范围
        [self.attributedText enumerateAttributesInRange:NSMakeRange(0, self.attributedText.length) options:0 usingBlock:^(NSDictionary<NSString *,id> * _Nonnull attrs, NSRange range, BOOL * _Nonnull stop) {
    
            DJEmotionAttachment *attachment = attrs[@"NSAttachment"];
            // 取出属性字典中的NSAttachment属性所对应的值
            if (!attachment) { // 没有附件(纯文本,Emoji)
                
                // 根据返回的range截取指定的attributedText
                NSAttributedString *str = [self.attributedText attributedSubstringFromRange:range];
                [text appendString:str.string]; // 将NSAttributedString转换为NSString 拼接文本
                
            } else { // 有附件(表情图片) 需要取出表情图片对应的文本
                [text appendString:attachment.emotion.chs]; // 拼接文本
            }
            
        }];
    
        return text;
    }

    DJEmotionAttachment.h

    #import <UIKit/UIKit.h>
    
    @class DJEmotion;
    @interface DJEmotionAttachment : NSTextAttachment
    
    /** 表情实体 */
    @property (nonatomic,strong) DJEmotion *emotion;
    
    @end

    DJEmotionAttachment.m

    #import "DJEmotionAttachment.h"
    #import "DJEmotion.h"
    
    
    @implementation DJEmotionAttachment
    
    - (void)setEmotion:(DJEmotion *)emotion {
        _emotion = emotion;
        
        NSString *emotionName = emotion.png;
        NSString *imagePath;
        if ([emotionName hasPrefix:@"d_"] || [emotionName hasPrefix:@"f_"] ||
            [emotionName hasPrefix:@"h_"] || [emotionName hasPrefix:@"l_"] || [emotionName hasPrefix:@"o_"] || [emotionName hasPrefix:@"w_"]) {
            imagePath = [NSString stringWithFormat:@"EmotionIcons/default/%@",emotion.png]; // 默认表情路径
        } else if ([emotionName hasPrefix:@"lxh_"]) {
            imagePath = [NSString stringWithFormat:@"EmotionIcons/lxh/%@",emotion.png]; // 浪小花表情路径
        }
    
        // 设置当前attachment的image
        self.image = [UIImage imageNamed:imagePath];
    }
    
    
    @end

    最终效果:

    待发送的文本为:

  • 相关阅读:
    MySQL 调优 —— Using filesort
    The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path
    JMS解决系统间通信问题
    LinkedList,ArrayList末尾插入谁效率高?
    C#学习笔记二:C#程序结构
    C#学习笔记一:C#开发环境的设置
    "NetworkError: 500 Internal Server Error
    JSON数据与JavaScript对象转换
    在使用Ibatis查询数据返回时,报如下错误:java ibatis The error happened while setting a property on the result object
    The APR based Apache Tomcat Native library
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6131583.html
Copyright © 2011-2022 走看看