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

    最终效果:

    待发送的文本为:

  • 相关阅读:
    [导入]在.NET下如何实现密码Hash化
    [导入]强大的.NET反编译工具Reflector及插件
    [导入]XML数据岛(XML Data Island)
    验证视图状态 MAC 失败。处理办法
    ASP.NET格式化字符串
    .NET 开发框架技术资料搜集
    网页中图片大小自动调整三种方法
    用户 'azhk' 登录失败。原因: 未与信任 SQL Server 连接相关联。
    jstl及el表达式笔记
    杰普Core Java课程笔记1
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6131583.html
Copyright © 2011-2022 走看看