码迷,mamicode.com
首页 > 移动开发 > 详细

iOS之UI--富文本总结

时间:2015-11-21 01:49:04      阅读:476      评论:0      收藏:0      [点我收藏+]

标签:

文章内容大纲

  • 1、NSAttributedString的基本使用
  • 2、NSAttributedString的简易封装
  • 3、使用开源代码GOBMarkupPaser处理富文本
  • 4、UITextKit简介
  • 5、附录

前言

富文本使用案例:

技术分享

  • 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个:
    • UILable,UITextField,UITextView。

然而这些控件本身对文本的展现方式很单一,通常仅仅能够控制字体样式、大小、颜色、加粗、斜体等等,而对于行距控制,字距控制,段落控制等高级功能却无能为力。

此时不免要提起一个非常强大的文本排版框架CoreText.framework

CoreText框架是基于 iOS 3.2+ 和 OSX 10.5+ 的一种能够对文本格式和文本布局进行精细控制的文本引擎。它良好的结合了 UIKit 和 Core Graphics/Quartz:

UIKit 的 UILabel 允许你通过在 IB 中简单的拖曳添加文本,但你不能改变文本的颜色和其中的单词。

Core Graphics/Quartz几乎允许你做任何系统允许的事情,但你需要为每个字形计算位置,并画在屏幕上。

CoreText正结合了这两者!你自己可以完全控制位置、布局、类似文本大小和颜色这样的属性,CoreText将帮你完善其它的东西??类似文本换行、字体呈现等等。

然而,CoreText.framework本身非常庞大,学习成本较高,使用起来也不是很方便,所以一般不是特殊需要,很少会有人去使用它

随着iOS6 API的发布,文字显示的API越来越完善,其中一个重要的更新是在UITextField,UITextView和UILabel中加入了对AttributedString的支持,实现行距控制,字距控制,段落控制等高级功能也不必再去使用深奥的CoreText框架。

而iOS7的发布,苹果又引入了TextKit,TextKit是一个快速而又现代化的文字排版和渲染引擎。

TextKit并没有新增类,只是在原有的文本显示控件上进行了封装,可以在平时我们最喜欢使用的UILabel,UITextField,UITextView等控件里面使用,其最主要的作用就是为程序提供文字排版和渲染的功能。

苹果引入TextKit的目的并非要取代已有的CoreText框架,虽然CoreText的主要作用也是用于文字的排版和渲染,但它是一种先进而又处于底层技术,如果我们需要将文本内容直接渲染到图形上下文(Graphics context)时,从性能和易用性来考虑,最佳方案就是使用CoreText。而如果我们需要直接利用苹果提供的一些控件(如UITextView、UILabel和UITextField等)对文字进行排版,那么借助于UIKit中TextKit提供的API无疑更为方便快捷。

TextKit在文字处理方面具有非常强大的功能,并且开发者可以对TextKit进行定制和扩展。据悉,苹果利用了2年的时间来开发TextKit,相信这对许多开发者来说都是福音。


 

IOS之NSAttributedString 使用详解

1、NSAttributedString的基本使用

  • 富文本注意:
    • 先设置的先显示,后设置的,如果和先设置的样式不一致,是不会覆盖的,富文本的设置具有先后顺序。
    • 不要忽略了空格也是一个字符。
    • 建议使用灵活的好用的NSMutableAttributedString,不要使用NSAttributedString。

富文本基本使用方法的思路概要

1、创建一个NSMutableAttributedString富文本对象(一般不用NSAttributedString)
2、设置addAttribute属性
    (1) addAttribute: 一个属性
    (2) addAttributes: 一个存储多个属性的属性字典,比如这个字典可以是:
        NSDictionary *attrDic = @{ 
                NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],                               
                NSForegroundColorAttributeName: [UIColor blueColor] 
        }; 
3、控件.attributedText = 富文本对象(和控件.txt = NSString文本对象不一样的)

示例代码:

技术分享
 1 - (void)typeOne {
 2     NSString *string = @"极客学院";
 3     UILabel *label   = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 30)];
 4     label.text       = string;
 5     [self.view addSubview:label];
 6 }
 7 
 8 - (void)typeTwo {
 9     NSString *string                            = @"极客学院";
10     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]
11                                initWithString:string];
12     
13     // 设置富文本样式
14     [attributedString addAttribute:NSForegroundColorAttributeName
15                              value:[UIColor redColor]
16                              range:NSMakeRange(0, 1)];
17     
18     [attributedString addAttribute:NSFontAttributeName
19                              value:[UIFont systemFontOfSize:24.f]
20                              range:NSMakeRange(0, 2)];
21     
22     UILabel *label       = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 30)];
23     label.attributedText = attributedString;
24     [self.view addSubview:label];
25 }
26 
27 - (void)typeThree {
28     NSString *string = @"极客学院极客学院极客学院极客学院极客学院极客学院极
29     客学院极客学院极客学院极客学院极客学院极客学院\n极客学院真不错!";
30     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] 
31                                                     initWithString:string];
32     
33     // 设置富文本 - 段落样式
34     NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
35     style.lineSpacing              = 10.f;
36     style.paragraphSpacing         = 20.f;
37     
38     [attributedString addAttribute:NSParagraphStyleAttributeName
39                              value:style
40                              range:NSMakeRange(0, string.length)];
41     
42     UILabel *label       = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 400)];
43     
44     // 设置段落样式的时候,numberOfLines必须为0
45     label.numberOfLines  = 0;
46     label.attributedText = attributedString;
47     [self.view addSubview:label];
48 }
View Code

其中AttributedString究竟可以设置哪些属性,具体来说,有以下21个:

NSFontAttributeName                设置字体属性,默认值:字体:Helvetica(Neue) 字号:12
NSForegroundColorAttributeNam      设置字体颜色,取值为 UIColor对象,默认值为黑色
NSBackgroundColorAttributeName     设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色
NSLigatureAttributeName            设置连体属性,取值为NSNumber 对象(整数),0 表示没有连体字符,1 表示使用默认的连体字符
NSKernAttributeName                设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄
NSStrikethroughStyleAttributeName  设置删除线,取值为 NSNumber 对象(整数)
NSStrikethroughColorAttributeName  设置删除线颜色,取值为 UIColor 对象,默认值为黑色
NSUnderlineStyleAttributeName      设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似
NSUnderlineColorAttributeName      设置下划线颜色,取值为 UIColor 对象,默认值为黑色
NSStrokeWidthAttributeName         设置笔画宽度,取值为 NSNumber 对象(整数),负值填充效果,正值中空效果
NSStrokeColorAttributeName         填充部分颜色,不是字体颜色,取值为 UIColor 对象
NSShadowAttributeName              设置阴影属性,取值为 NSShadow 对象
NSTextEffectAttributeName          设置文本特殊效果,取值为 NSString 对象,目前只有图版印刷效果可用:
NSBaselineOffsetAttributeName      设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏
NSObliquenessAttributeName         设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾
NSExpansionAttributeName           设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本
NSWritingDirectionAttributeName    设置文字书写方向,从左向右书写或者从右向左书写
NSVerticalGlyphFormAttributeName   设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本
NSLinkAttributeName                设置链接属性,点击后调用浏览器打开指定URL地址
NSAttachmentAttributeName          设置文本附件,取值为NSTextAttachment对象,常用于文字图片混排
NSParagraphStyleAttributeName      设置文本段落排版格式,取值为 NSParagraphStyle 对象

关于属性的具体如何使用,对于不熟悉的属性可以通过搜索引擎了解。

2、NSAttributedString的简易封装

写出思路:

根据NSAttributedString的基本使用,我们每次需要设置富文本,都需要创建NSAttribute并调用相同的add...方法。
那么,就可以先创建一个类,并把这个add...方法抽离出来放进这个类中,类似MVC的抽离模型数据对象。
这个类是属性模型对象,

3、使用开源代码GOBMarkupPaser处理富文本

首先,关于开源代码GOBMarkupPaser处理富文本有一个很好的学习博客:http://www.cnblogs.com/YouXianMing/p/4269213.html

直接使用:

github描述的虽然比较多,但是用起来还是比较容易的。下面只要跑一下程序,源码中也有demo,先看看源码运行的程序效果:

上gif图

上层封装:

因为这个开源代码GONMarkupParser处理富文本比较方便,所以以后开发项目建议使用。

4、UITextKit简介

什么是UITextKit?

TextKit是在iOS7中新出的,实现了对CoreText的封装,使用起来更加方便.

虽然是新出的,但也不代表立马就能上手-_-!!,TextKit可以实现图文混排效果,很好用.


什么时候使用UITextKit?

图文混排,但并不是什么时候要实现图文混排就要用这个,比如有的app凤凰新闻客户端就不是,但是可以使用UITextKit实现稍微简单的图文混搭的界面。

只需要了解一下有UITextKit这么个东西,其实这个UITextKit可以用来实现一个简易的电子书阅读器。

 

iOS之UI--富文本总结

标签:

原文地址:http://www.cnblogs.com/goodboy-heyang/p/4982805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!