亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS高仿微信表情輸入功能代碼分享

2020-07-26 03:05:31
字體:
來源:轉載
供稿:網友

最近項目需求,要實現一個類似微信的的表情輸入,于是把微信的表情扒拉出來,實現了一把??梢詮倪@里下載源碼。看起來表情輸入沒有多少東西,不外乎就是用NSTextAttachment來實現圖文混排,結果在實現的過程中遇到了很多小問題,接下來會一一介紹遇到過的坑。先上一張效果圖:

一、實現表情選擇View(WKExpressionView)

具體的實現就不細說了,主要功能就是點擊表情時,將對應表情的圖片名稱通知給delegate。

二、實現表情textView(WKExpressionTextView)

WKExpressionTextView繼承自UITextView, 提供
- (void)setExpressionWithImageName:(NSString *)imageName fontSize:(CGFloat)fontSize方法,用于根據圖片插入表情。 具體實現:

//富文本WKExpressionTextAttachment *attachment = [[WKExpressionTextAttachment alloc] initWithData:nil ofType:nil];UIImage *image = [UIImage imageNamed:imageName];attachment.image = image;attachment.text = [WKExpressionTool getExpressionStringWithImageName:imageName];attachment.bounds = CGRectMake(0, 0, fontSize, fontSize);NSAttributedString *insertAttributeStr = [NSAttributedString attributedStringWithAttachment:attachment];NSMutableAttributedString *resultAttrString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];//在當前編輯位置插入字符串[resultAttrString insertAttributedString:insertAttributeStr atIndex:self.selectedRange.location];NSRange tempRange = self.selectedRange;self.attributedText = resultAttrString;self.selectedRange = NSMakeRange(tempRange.location + 1, 0);[self.textStorage addAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:_defaultFontSize]} range:NSMakeRange(0, self.attributedText.length)];[self scrollRangeToVisible:self.selectedRange];[self textChanged];

其中WKExpressionTextAttachment繼承自NSTextAttachment, 并新增text字段,為了保存表情對應的文本,用于復制粘貼操作。

@interface WKExpressionTextAttachment : NSTextAttachment@property (nonatomic, copy) NSString *text;@end

WKExpressionTool的提供將普通字符串轉換為富文本的方法,主要用于復制時生成表情。

主要方法

+ (NSAttributedString *)generateAttributeStringWithOriginalString:(NSString *)originalString fontSize:(CGFloat)fontSize{NSError *error = NULL;NSMutableAttributedString *resultAttrString = [[NSMutableAttributedString alloc] initWithString:originalString];NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http://[[a-zA-Z0-9/u4e00-/u9fa5]{1,}//]" options:NSRegularExpressionAllowCommentsAndWhitespace error:&error];NSArray *results = [regex matchesInString:originalString options:NSMatchingReportCompletion range:NSMakeRange(0, originalString.length)];if (results) {for (NSTextCheckingResult *result in results.reverseObjectEnumerator) {NSRange resultRange = [result rangeAtIndex:0];NSString *stringResult = [originalString substringWithRange:resultRange];NSLog(@"%s %@/n", __FUNCTION__, stringResult);NSAttributedString *expressionAttrString = [self getAttributeStringWithExpressionString:stringResult fontSize:fontSize];[resultAttrString replaceCharactersInRange:resultRange withAttributedString:expressionAttrString];}}return resultAttrString;}/*** 通過表情生成富文本** @param expressionString 表情名* @param fontSize 對應字體大小** @return 富文本*/+ (NSAttributedString *)getAttributeStringWithExpressionString:(NSString *)expressionString fontSize:(CGFloat)fontSize{NSString *imageName = [self getExpressionStringWithImageName:expressionString];WKExpressionTextAttachment *attachment = [[WKExpressionTextAttachment alloc] initWithData:nil ofType:nil];UIImage *image = [UIImage imageNamed:imageName];attachment.image = image;attachment.text = [WKExpressionTool getExpressionStringWithImageName:imageName];attachment.bounds = CGRectMake(0, 0, fontSize, fontSize);NSAttributedString *appendAttributeStr = [NSAttributedString attributedStringWithAttachment:attachment];return appendAttributeStr;}

至此,基本功能實現完成。 接下來說說遇到的小問題

編輯是應該對應selectedRange

復制粘貼操作需要重新實現

textView在插入NSTextAttachment后,會默認把font的size修改為12,需要記錄默認的size

對應selectedRange操作

具體的操作查看源碼

重新實現copy、cut方法

進行復制、粘貼操作會發現,不能對圖片進行復制,所以需要自己重寫copy、cut方法

- (void)copy:(id)sender{NSAttributedString *selectedString = [self.attributedText attributedSubstringFromRange:self.selectedRange];NSString *copyString = [self parseAttributeTextToNormalString:selectedString];UIPasteboard *pboard = [UIPasteboard generalPasteboard];if (copyString.length != 0) {pboard.string = copyString;}}- (void)cut:(id)sender{[self copy:sender];NSMutableAttributedString *originalString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];[originalString deleteCharactersInRange:self.selectedRange];self.attributedText = originalString;NSLog(@"--%@", NSStringFromRange(self.selectedRange));[self textChanged];}

記錄默認font的size

利用實例變量defaultFontSize,在WKExpressionTextView實例化時記錄self.font.pointSize,以后需要取font的size時,直接取defaultFontSize

@interface WKExpressionTextView : UITextView@property (nonatomic, assign) CGFloat defaultFontSize;@end@implementation WKExpressionTextView{CGFloat _defaultFontSize;}- (void)awakeFromNib{[self setup];}- (instancetype)initWithFrame:(CGRect)frame{self = [super initWithFrame:frame];if (self) {[self setup];}return self;}- (void)setup{[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange:) name:UITextViewTextDidChangeNotification object:self];_defaultFontSize = self.font.pointSize;self.delegate = self;}

以上所述是小編給大家介紹的iOS高仿微信表情輸入功能代碼分享,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内外成人免费激情在线视频| 国产日韩精品在线| 欧美日韩国产中文精品字幕自在自线| 国产精品大片wwwwww| 九九九久久久久久| 亚洲色图校园春色| 91精品国产91久久久久久吃药| 在线观看免费高清视频97| 在线看欧美日韩| 精品国产精品三级精品av网址| 国产精品欧美日韩久久| 日韩亚洲欧美成人| 亚洲在线视频福利| 久久精品夜夜夜夜夜久久| 亚洲最新av在线网站| 成人一区二区电影| 91精品在线国产| 欧美日韩激情网| 91天堂在线视频| 丝袜亚洲另类欧美重口| 欧美成人精品在线观看| 成人春色激情网| 色噜噜狠狠狠综合曰曰曰| 欧美裸体xxxx极品少妇| 精品久久久久国产| 久久精品青青大伊人av| 日韩第一页在线| 精品视频在线观看日韩| 国产女人18毛片水18精品| 在线精品国产欧美| 日本精品中文字幕| 欧美精品在线网站| 日韩在线视频国产| 92福利视频午夜1000合集在线观看| www国产精品视频| 国产999精品视频| 最新日韩中文字幕| 国产精品手机播放| 红桃av永久久久| 国产精品你懂得| 欧美性生交大片免网| 久久久久久久久久久免费| 亚洲一区999| 美女久久久久久久| 日本乱人伦a精品| 亚洲天堂免费在线| 午夜免费久久久久| 久久影院免费观看| 欧美日韩国产丝袜美女| 日韩在线播放视频| 色综合伊人色综合网站| 久久久噜噜噜久噜久久| 亚洲日韩中文字幕| 成人免费福利在线| 久久久www成人免费精品张筱雨| 亚洲最大av网站| 国产精品久久一区| 日韩av在线一区二区| 欧美亚洲国产视频| 日韩欧美在线一区| 91av成人在线| 久久久久久网站| 国产91成人在在线播放| 国产一区二区三区毛片| 国产精品男女猛烈高潮激情| 亚洲精品国产综合久久| 成人黄色大片在线免费观看| 欧美电影免费观看网站| 日韩最新免费不卡| 日韩美女免费线视频| 欧美交受高潮1| 激情成人中文字幕| 成人性生交大片免费观看嘿嘿视频| 午夜精品99久久免费| 日韩av在线网| 亚洲人成网站免费播放| 欧美激情a∨在线视频播放| 成人欧美一区二区三区黑人孕妇| 国产亚洲精品久久久久久牛牛| 欧美洲成人男女午夜视频| 欧美综合一区第一页| 亚洲女性裸体视频| 欧美日韩加勒比精品一区| 欧美黑人极品猛少妇色xxxxx| 日本91av在线播放| 国产精品福利在线| 国产精品激情av在线播放| 欧美老肥婆性猛交视频| 久久久久中文字幕2018| www国产精品com| 国产精品青青在线观看爽香蕉| 国产日韩亚洲欧美| 日韩免费视频在线观看| 欧洲日韩成人av| 狠狠久久亚洲欧美专区| 日本精品视频在线| 日韩欧美在线观看视频| 国产精品无码专区在线观看| 精品日本高清在线播放| 欧美xxxx14xxxxx性爽| 日韩av成人在线观看| 国产亚洲精品综合一区91| 国外色69视频在线观看| 久久国产精品首页| 色无极亚洲影院| 亚洲免费av片| 国内精品久久久久影院 日本资源| 亚洲色图国产精品| 搡老女人一区二区三区视频tv| 97av在线视频免费播放| 欧美成人免费全部| 岛国精品视频在线播放| 日本亚洲欧美三级| 亚洲va久久久噜噜噜| 日韩精品免费一线在线观看| 色综合久久中文字幕综合网小说| 狠狠久久亚洲欧美专区| 日韩中文字幕在线视频| 国产精品自拍偷拍| 亚洲人成自拍网站| 91sao在线观看国产| 亚洲日本欧美日韩高观看| 久久久之久亚州精品露出| xvideos国产精品| 久久97精品久久久久久久不卡| 色播久久人人爽人人爽人人片视av| 欧美大荫蒂xxx| 亚洲色图偷窥自拍| 热re99久久精品国产66热| 国产成人+综合亚洲+天堂| 亚洲一区二区三区久久| 成人97在线观看视频| 国产欧美va欧美va香蕉在| 久久精视频免费在线久久完整在线看| 亚洲激情在线观看| 亚洲精品美女在线观看播放| 成人夜晚看av| 国产在线98福利播放视频| 色午夜这里只有精品| 亚洲xxxxx电影| 成人综合国产精品| 欧美成人黑人xx视频免费观看| 国产免费一区二区三区在线观看| 欧美成人精品在线| 国产精品自产拍高潮在线观看| 精品国产鲁一鲁一区二区张丽| 欧美福利在线观看| 欧美专区福利在线| 最近2019好看的中文字幕免费| 色偷偷88888欧美精品久久久| 亚洲日本中文字幕| 亚洲欧美中文日韩在线| 亚洲天堂影视av| 欧美精品做受xxx性少妇| 亚洲综合av影视| 亚洲欧美国产一本综合首页| 欧洲亚洲妇女av| 九九热r在线视频精品| 欧美亚洲另类在线| 日韩在线观看网站| 亚洲第一av在线| 亚洲免费av网址| 久久成年人免费电影| 韩国美女主播一区|