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

    最终效果:

    待发送的文本为:

  • 相关阅读:
    【Java】_2_Java程序入门第五课
    【算法和数据结构】_3_线性结构_栈
    Windows程序设计_17_鼠标_1
    网络基础知识1:集线器,网桥,交换机
    [hyddd安全性测试笔记2]浅淡静态代码分析工具
    [Ruby小记]初试~
    Arp攻击实战
    [hyddd安全性测试笔记1]URL Encode and URL Decode
    网络嗅探技术浅析
    Session小记
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6131583.html
Copyright © 2011-2022 走看看