iOS中不同形式的图文混排技术的实现总结
来源:互联网 发布:社会与经济发展数据库 编辑:程序博客网 时间:2024/05/16 18:53
那么什么是图文混排呢?
在这里我给大家举个例子大家就明白了,例如我们在微博类,社交聊天应用中常常会遇到各种表情,各种链接的解析。问题来了,图文混排的形式有哪些呢?
图文混排的形式?
1. 富文本形式2. core Text(文字排版)3. TextKit4. UIWebView
一.富文本
我们可以采用attributeString来进行图文混排.例如一个文字上插入一个图片.实现如下:
NSString *content = @"文字加上表情[得意][酷][呲牙]"; NSMutableAttributedString *attrStr = [Utility emotionStrWithString:content]; _firstLabel.attributedText= attrStr; NSString *text = @"<微信>深圳市腾讯计算机系统有限公司成立于1998年11月,由马化腾、张志东、许晨晔、陈一丹、曾李青五位创始人共同创立。[1] 是中国最大的互联网综合服务提供商之一,也是中国服务用户最多的互联网企业之一。[2]腾讯多元化的服务包括:社交和通信服务QQ及微信/WeChat、社交网络平台QQ空间、腾讯游戏旗下QQ游戏平台、门户网站腾讯网、腾讯新闻客户端和网络视频服务腾讯视频等。。"; NSMutableAttributedString *attrStr2 = [Utility exchangeString:@"<微信>" withText:text imageName:@"header_wechat"]; _secondLabel.attributedText = attrStr2;
2. coreText
1) 什么是coreText?
iOS/OSX中用于描述富文本的类是NSAttributedString,顾名思义,它比NSString多了Attribute的概念。它可以包含很多属性,粗体,斜体,下划线,颜色,背景色等等,每个属性都有其对应的字符区域。在OSX上我们只需解析完毕相应的数据,准备好NSAttributedString即可,底层的绘制完全可以交给相应的控件完成。但是在iOS上就没有这么方便,想要绘制Attributed String就需要用到CoreText了。(当然iOS6之后已经有AttributedLabel了。)
使用CoreText进行NSAttributedString的绘制,最重要的两个概念就是CTFrameSetter和CTFrame。他们的关系如下:
其中CTFramesetter是由CFAttributedString(NSAttributedString)初始化而来,可以认为它是CTFrame的一个Factory,通过传入CGPath生成相应的CTFrame并使用它进行渲染:直接以CTFrame为参数使用CTFrameDraw绘制或者从CTFrame中获取CTLine进行微调后使用CTLineDraw进行绘制。
一个CTFrame是由一行一行的CLine组成,每个CTLine又会包含若干个CTRun(既字形绘制的最小单元),通过相应的方法可以获取到不同位置的CTRun和CTLine,以实现对不同位置touch事件的响应。
3. TextKit
ios7 开始,功能强大,简单易用,也可以进行图文混排. TextKit并没有新增的类,他是在原有的文本显示控件上的封装,可以使用平时我们最喜欢使用的UILabel,UITextField,UITextView里面就可以使用了。现在来详细介绍一下.
1.NSAtrributedString
这是所有TextKit的载体,所有的信息都会输入到NSAttributedString里面,然后将这个String输入到Text控件里面就可以显示了。
2.NSTextAttachment
iOS7新增的类,作为文本的附件,可以放文件,可以放数据,以 NSAttachmentAttributeName这个key放入NSAttributedString里面,在表情混排这里,我们将放入image。
3.重载NSTextAttachment
本来是可以直接使用NSTextAttachment,但是我们需要根据文字大小来改变表情图片的大小,于是我们需要重载NSTextAttachment,NSTextAttachment实现了NSTextAttachmentContainer,可以给我们改变返回的图像,图像的大小。
4. UIWebView
利用UIWebView加载HTML实现图文混排
但是注意:UIWebView本身有内存问题,占用内存相比较而较大不推荐,但是使用比较灵活,代码实现如下:
- (void)loadHtmlToWebView{ NSURL *url = [[NSBundle mainBundle] URLForResource:@"text" withExtension:@"html"]; [_webView loadRequest:[NSURLRequest requestWithURL:url]];}- (void)loadHtmlToTextView{ // Create attributed string from HTML NSURL *url = [[NSBundle mainBundle] URLForResource:@"text" withExtension:@"html"]; NSAttributedString *attrStr = [[NSAttributedString alloc] initWithFileURL:url options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil]; [_textView setAttributedText:attrStr];}
结束
- iOS中不同形式的图文混排技术的实现总结
- iOS中不同形式的图文混排技术的实现总结
- Android中实现不同文字颜色和图文混排的Span总结
- Android中实现不同文字颜色和图文混排的Span总结
- IOS总结_实现UIButton的图文混排(一)
- IOS总结_实现UIButton的图文混排(二)
- IOS总结_实现UIButton的图文混排(一)
- IOS总结_实现UIButton的图文混排(二)
- iOS图文混排的简易实现
- iOS图文混排的简单实现
- IOS总结实现UIButton的图文混排 同时显示文字和图片
- TextView的图文混排,不同文字颜色混排
- iOS中UIWebView的使用详解及利用webview实现图文混排实例
- [iOS开发]关于仿网易新闻中详细页图文混排功能的实现
- iOS 实现图文混排
- iOS Label的图文混排
- iOS 有行距的图文混排
- ios简单的图文混排
- Java运行时内存数据区域分布
- iOS夯实:ARC时代的内存管理
- 宽度优先搜索(BFS):POJ3669--Meteor Shower
- android关机时Framework层对存储设备的操作分析
- 基于Spring session data redis的session共享
- iOS中不同形式的图文混排技术的实现总结
- Google Java编程风格规范
- c# [app.config] 找不到 "ConfigurationManager",即使添加了命名空间 using System.Configuration;
- Android加载图片导致内存溢出(Out of Memory异常)
- H265(HEVC) nal 单元头介绍及rtp发送中的fu分组发送详解
- spring-day2
- kali linux安装后常用软件安装介绍和部分错误解决
- ISCC某题题解
- hdoj 1087 Super Jumping! Jumping! Jumping!(最大递增子段和)