• 例如微博表情添加到textView中


    第一步:外界需要传表情按钮点击时候的数据过来

    - (void)publishTextViewWith:(YSWeiBoEmotion *)emotion {

        if (emotion.code)  {

            [self insertText:emotion.code.emoji];// 把emoji表情的16进制编码转为文字

        }

        else if (emotion.png)// 表情的png图片名

        {

    //    其实只是使用NSTextAttachment将想要插入的图片作为一个字符处理,转换成NSAttributedString,然后UITextView直接进行渲染就搞定了。上面的代码是初始化一个NSTextAttachment,然后set一下image属性,也可以使用NSTextAttachment的init(data contentData: NSData?, ofType uti: String?)方法来设置图片。

    //  转换为NSAttributedString

            NSTextAttachment *attachment = [[NSTextAttachment alloc] init];

            attachment.image = [UIImage imageNamed:emotion.png];// 获取图片名字

            CGFloat attchWH = self.font.lineHeight;

            attachment.bounds = CGRectMake(0, -4, attchWH, attchWH);

            NSAttributedString *attritedString = [NSAttributedString attributedStringWithAttachment:attachment];

            // 插入属性文字到光标位置

            [self insertAttributeText:attritedString];//??????

        }

    }

    把NSAttributedString拼接图片

    - (void)insertAttributeText:(NSAttributedString *)text

    {

        NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] init];

        // 拼接之前的文字(图片和普通文字)

        [attributedText appendAttributedString:self.attributedText];

        // 拼接图片

        NSUInteger loc = self.selectedRange.location;

        [attributedText insertAttributedString:text atIndex:loc];

         self.attributedText = attributedText;

        // 移除光标到表情的后面

        self.selectedRange = NSMakeRange(loc + 1, 0);

    }

    把把emoji表情的16进制编码转为文字

    这里定义一个宏

    #define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C0000) << 18) | (c & 0x3F) << 24)

     + (NSString *)emojiWithIntCode:(int)intCode {

        int symbol = EmojiCodeToSymbol(intCode);

        NSString *string = [[NSString alloc] initWithBytes:&symbol length:sizeof(symbol) encoding:NSUTF8StringEncoding];

        if (string == nil) {

            string = [NSString stringWithFormat:@"%C", (unichar)intCode];

        }

        return string;

    }

    - (NSString *)emoji {

        return [NSString emojiWithStringCode:[NSString stringWithFormat:@"%@",self]];

    }

     + (NSString *)emojiWithStringCode:(NSString *)stringCode {

        char *charCode = (char *)stringCode.UTF8String;

        int intCode = (int)strtol(charCode, NULL, 16);

        return [self emojiWithIntCode:intCode];

    }

  • 相关阅读:
    暴破助攻提权:ruadmin
    Python 绝技 —— TCP服务器与客户端
    代码审计| HDWiki 漏洞(一)
    Android逆向——smali复杂类解析
    从外部入侵公司:外部渗透测试
    大脸猫讲逆向之ARM汇编中PC寄存器详解
    Ms17-010进行WEB提权之实践下某培训靶机服务器
    XSS钓鱼某网约车后台一探究竟,乘客隐私暴露引发思考
    python爬虫实践教学
    Swif语法基础 要点归纳(一)
  • 原文地址:https://www.cnblogs.com/happyEveryData/p/5523725.html
Copyright © 2020-2023  润新知