打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
iOS实现简单图文混排效果

在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现。现在分享一种比较简单的实现方式


iOS sdk中为我们提供了一套完善的文字排版开发组件:CoreText。CoreText库中提供了很多的工具来对文本进行操作,例如CTFont、CTLine、CTFrame等。利用这些工具可以对文字字体每一行每一段落进行操作。

此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同。


1.         首先,需要引入CoreText库

在需要使用的类文件中添加#import 头文件。

2.         设置文本的参数

创建一个NSMutableAttributedString对象,包含所需展示的文本字符串。这样就可以对其进行设置了。通过CTFontCreateWithName函数创建一个CTFont对象,利用NSMutableAttributedString对象的addAttribute方法进行设置。类似的方法可以设置字间距。

对其方式与行间距的设置方式:

// 文本对齐方式 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.         绘制文本:

设置每一行绘制文本的区间:

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 来展示放大后的图片,并且加入动画效



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
iOS中不同形式的图文混排技术的实现总结
IOS利用Core Text对文字进行排版
133、文字如何实现纵横混排:Word2003入门动画教程
Word入门动画教程133:纵横混排
轻松实现工件刻字功能
表格与文字混排设置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服