http://blog.csdn.net/zengraoli/article/details/12616075
2016-08-10 11:09
295 查看
iOS sdk中为我们提供了一套完善的文字排版开发组件:CoreText。CoreText库中提供了很多的工具来对文本进行操作,例如CTFont、CTLine、CTFrame等。利用这些工具可以对文字字体每一行每一段落进行操作。
此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同。
在需要使用的类文件中添加#import 头文件。
创建一个NSMutableAttributedString对象,包含所需展示的文本字符串。这样就可以对其进行设置了。通过CTFontCreateWithName函数创建一个CTFont对象,利用NSMutableAttributedString对象的addAttribute方法进行设置。类似的方法可以设置字间距。对其方式与行间距的设置方式:
[cpp]
view plain
copy
print?
// 文本对齐方式
CTTextAlignment alignment = kCTLeftTextAlignment;
CTParagraphStyleSetting alignmentStyle;
alignmentStyle.spec = kCTParagraphStyleSpecifierAlignment;
alignmentStyle.valueSize = sizeof(alignment);
alignmentStyle.value = &alignment;
// 创建设置数组
CTParagraphStyleSetting settings[] ={alignmentStyle};
CTParagraphStyleRef style = CTParagraphStyleCreate(settings, 1);
同样使用addAttribute设置字符串对象。这样的方法还可以设置行间距,段间距等参数。
设置每一行绘制文本的区间:
[cpp]
view plain
copy
print?
CFRange lineRange = CFRangeMake(currentIndex, lineLength);
建立文本行对象
CTLineRef line = CTTypesetterCreateLine(typeSetter, lineRange);
CGFloat x = [self textOffsetForLine:line inRect:self.bounds];
// 设置一行的位置
CGContextSetTextPosition(context, x, y);
// 绘制一行文字
CTLineDraw(line, context);
在完成文本绘制功能后可以加入调整文字大小的功能,和图片的放大的功能。文字大小可以通过直接设置字体大小后重新绘制文本来实现。图片放大可以在视图上添加一个新的UIImageView 来展示放大后的图片,并且加入动画效果
此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同。
1.首先,需要引入CoreText库
在需要使用的类文件中添加#import 头文件。
2.设置文本的参数
创建一个NSMutableAttributedString对象,包含所需展示的文本字符串。这样就可以对其进行设置了。通过CTFontCreateWithName函数创建一个CTFont对象,利用NSMutableAttributedString对象的addAttribute方法进行设置。类似的方法可以设置字间距。对其方式与行间距的设置方式:[cpp]
view plain
copy
print?
// 文本对齐方式
CTTextAlignment alignment = kCTLeftTextAlignment;
CTParagraphStyleSetting alignmentStyle;
alignmentStyle.spec = kCTParagraphStyleSpecifierAlignment;
alignmentStyle.valueSize = sizeof(alignment);
alignmentStyle.value = &alignment;
// 创建设置数组
CTParagraphStyleSetting settings[] ={alignmentStyle};
CTParagraphStyleRef style = CTParagraphStyleCreate(settings, 1);
同样使用addAttribute设置字符串对象。这样的方法还可以设置行间距,段间距等参数。
3.计算图片所占高度。图片可以使用UIImageView 来进行显示。很容易便可获取每张图片所占总高度。
4.由于图片宽度是固定的这样就可以计算每行文字缩短的字数。只要文本的总体高度低于图像总高度则文字长度都是缩短的。用CTTypesetterSuggestLineBreak函数动态的计算每一行里的字数,因为每一行里面的中文字、标点符号、数
字、字母都不一样所以可以显示的字数肯定也是不同的,所以需要作这样的计算。这样循环直至文本结束,就可以知道有多少行字了。再根据字体高度和行间距得出总的文本高度,如果文本高度大于图片总高度那么显示区域的Frame高度就是
文本的高度,反之亦然。
5.绘制文本:
设置每一行绘制文本的区间:[cpp]
view plain
copy
print?
CFRange lineRange = CFRangeMake(currentIndex, lineLength);
建立文本行对象
CTLineRef line = CTTypesetterCreateLine(typeSetter, lineRange);
CGFloat x = [self textOffsetForLine:line inRect:self.bounds];
// 设置一行的位置
CGContextSetTextPosition(context, x, y);
// 绘制一行文字
CTLineDraw(line, context);
6.其他功能:
在完成文本绘制功能后可以加入调整文字大小的功能,和图片的放大的功能。文字大小可以通过直接设置字体大小后重新绘制文本来实现。图片放大可以在视图上添加一个新的UIImageView 来展示放大后的图片,并且加入动画效果相关文章推荐
- Windows Phone开发(19):三维透视效果 转:http://blog.csdn.net/tcjiaan/article/details/7388873
- http://blog.csdn.net/qingrun/article/details/42738111
- http://m.blog.csdn.net/article/details?id=2630620
- 特征提取http://blog.csdn.net/passball/article/details/5204132
- http://blog.csdn.net/daiguangda/article/details/7837919
- BAT面试题 转载自DERRANTCM http://blog.csdn.net/derrantcm/article/details/46658823
- Java中Synchronized的用法(原文: http://blog.csdn.net/luoweifu/article/details/46613015 )
- http://blog.csdn.net/jiyiqinlovexx/article/details/51173080
- http://blog.csdn.net/cswhale/article/details/16941281
- static_cast < type-id > ( expression ) http://blog.csdn.net/moruihong/article/details/7712260
- http://blog.csdn.net/superhosts/article/details/15813247
- http://blog.csdn.net/hintcnuie/article/details/38468093
- http://blog.csdn.net/lenotang/article/details/2823230
- 学习新技能的37个最佳网站 - levy_cui 博客 - 博客频道 - CSDN.NET http://blog.csdn.net/levy_cui/article/details/51151224
- 转自http://blog.csdn.net/mazhaojuan/article/details/7660657
- http://blog.csdn.net/zgx_nn/article/details/41009347
- http://blog.csdn.net/zhvsby/article/details/5986645
- 浅谈编程语言的类型系统http://blog.csdn.net/hittata/article/details/42360773
- http://m.blog.csdn.net/article/details?id=49132747
- http://blog.csdn.net/wangshione/article/details/8491098