博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
新浪微博客户端(50)-解决输入Emotion表情逐渐变小的问题
阅读量:5838 次
发布时间:2019-06-18

本文共 3019 字,大约阅读时间需要 10 分钟。

 

UITextView+Extension.h

#import 
@interface UITextView (Extension)/** 插入属性文本 */- (NSMutableAttributedString *)insertAttributeText:(NSAttributedString *)insertAttrText;/** 插入属性文本和要设置的block内容 */- (NSMutableAttributedString *)insertAttributeText:(NSAttributedString *)insertAttrText settingsBlock:(void (^)(NSMutableAttributedString * attributedString)) settingsBlock;@end

UITextView+Extension.m

#import "UITextView+Extension.h"@implementation UITextView (Extension)- (NSMutableAttributedString *)insertAttributeText:(NSAttributedString *)insertAttrText {    return [self insertAttributeText:insertAttrText settingsBlock:nil];    }- (NSMutableAttributedString *)insertAttributeText:(NSAttributedString *)insertAttrText settingsBlock:(void (^)(NSMutableAttributedString *))settingsBlock {        // 以textView的原本内容为基础构造一个attrStr    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];        // 将附件文本插入到光标所在的位置    NSUInteger cursorLocation = self.selectedRange.location;    [attrStr insertAttributedString:insertAttrText atIndex:cursorLocation];        // 如果传入了block,就调用block    if(settingsBlock) {        settingsBlock(attrStr);    }        // 更新当前textView内容    self.attributedText = attrStr;        // 修正当前光标位置(将光标移动到插入表情末尾,默认光标会跳转到所有文本最后)    self.selectedRange = NSMakeRange(cursorLocation + 1, 0);        return attrStr;}@end

DJEmotionTextView.m

#import "DJEmotionTextView.h"#import "DJEmotion.h"@implementation DJEmotionTextView- (void)insertEmotion:(DJEmotion *)emotion {    // 插入表情    if (emotion.code) { // Emoji表情        [self insertText:[NSString emojiWithStringCode:emotion.code]];    } else if (emotion.png) { // 表情图片        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]; // 浪小花表情路径        }                        // 构造表情附件        NSTextAttachment *attachment = [[NSTextAttachment alloc] init];        attachment.image = [UIImage imageNamed:imagePath];        CGFloat attachmentWH = self.font.lineHeight;        attachment.bounds = CGRectMake(0, -4, attachmentWH, attachmentWH);        NSAttributedString *attachStr = [NSAttributedString attributedStringWithAttachment:attachment];                // 插入属性文本        [self insertAttributeText:attachStr settingsBlock:^(NSMutableAttributedString *attributedString) {                        // 设置当前attrStr的字体与textView原有字体大小一致,因为attrStr的字体无法通过textview.font属性来设置            [attributedString addAttribute:NSFontAttributeName value:self.font range:NSMakeRange(0, attributedString.length)];        }];    }}@end

 

转载地址:http://kmjcx.baihongyu.com/

你可能感兴趣的文章
美团数据仓库的演进
查看>>
SAP被评为“大数据”预测分析领军企业
查看>>
联想企业网盘张跃华:让文件创造业务价值
查看>>
记录一次蚂蚁金服前端电话面试
查看>>
直播源码开发视频直播平台,不得不了解的流程
查看>>
Ubuntu上的pycrypto给出了编译器错误
查看>>
聊聊flink的RestClientConfiguration
查看>>
在CentOS上搭建git仓库服务器以及mac端进行克隆和提交到远程git仓库
查看>>
測試文章
查看>>
Flex很难?一文就足够了
查看>>
【BATJ面试必会】JAVA面试到底需要掌握什么?【上】
查看>>
CollabNet_Subversion小结
查看>>
mysql定时备份自动上传
查看>>
17岁时少年决定把海洋洗干净,现在21岁的他做到了
查看>>
《写给大忙人看的java se 8》笔记
查看>>
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>