zoukankan      html  css  js  c++  java
  • 例如微博表情添加到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];

    }

  • 相关阅读:
    HDU2546(01背包)
    HDU4283(KB22-G)
    POJ1651(KB-E)
    POJ2955(KB22-C 区间DP)
    POJ3264(KB7-G RMQ)
    POJ3468(KB7-C 线段树)
    POJ3616(KB12-R dp)
    Ubuntu16.04安装opencv for python/c++
    华中农业大学第五届程序设计大赛网络同步赛-L
    华中农业大学第五届程序设计大赛网络同步赛-K
  • 原文地址:https://www.cnblogs.com/happyEveryData/p/5523725.html
Copyright © 2011-2022 走看看