zoukankan      html  css  js  c++  java
  • ios图文混排

    图文混排的形式

    1. 富文本形式
    2. core Text(文字排版)
    3. TextKit
    4. 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];
    
    }


    原文链接:http://www.2cto.com/kf/201605/507938.html
  • 相关阅读:
    统计nginx日志里访问次数最多的前十个IP
    while 格式化输出 运算符 字符编码
    Python 软件安装
    Python 基础
    Typora 基础的使用方法
    Django ORM (四) annotate,F,Q 查询
    Django 惰性机制
    Django ORM (三) 查询,删除,更新操作
    Django ORM (二) 增加操作
    Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
  • 原文地址:https://www.cnblogs.com/it-k-50/p/6093404.html
Copyright © 2011-2022 走看看