Mik*_*e S 3 iphone cgcontext sizewithfont ios
我正在使用iOS中的CGContext绘制多个"页面"图像.我在我的应用程序中广泛使用了sizeWithFont和drawInRect组合.我需要做的是在多个页面中分割大量文本.我可以调整它的大小并确定它是否需要另一页,但我怎么知道在哪里砍它?我是否必须做一个丑陋的循环来逐字检查,直到找到一个完全适合页面的字符串长度,然后在那个时候切断字符串?有更聪明的方法吗?
有任何想法吗?
谢谢.
该NSString的增加来的UIKit绘制文本,您可以预先确定渲染给定字体给定文本所需的空间的确切数额.如果将文本拆分为页面,则可以使用此方法.
– sizeWithFont:constrainedToSize:lineBreakMode:
Run Code Online (Sandbox Code Playgroud)
假设已知字体和换行模式,请创建一个与页面宽度相同的CGSize,并使用足够的数字作为高度.这将是我们约束文本的最大大小.
CGSize maximumSize = CGSizeMake(pageWidth, 999999999);
CGSize expectedSize = [veryLongString sizeWithFont:theFont constrainedToSize:maximumSize lineBreakMode:theLineBreakMode];
Run Code Online (Sandbox Code Playgroud)
expectedSize将告诉我们文本将采取的大小假设它是否可以无限延伸(非常接近).要查找所需页数,只需将总高度除以一页的高度即可.
NSInteger totalPages = ceil(expectedSize.height / heightOfOnePage);
Run Code Online (Sandbox Code Playgroud)
您还需要调整一页的高度,以确保不会剪切最后一行文本.为此,页面的高度应该是字体行高的倍数.假设初始页面高度为300px,而字体高度为16px,那么将会有一些剪切,因为300/16 = 18.75它不是整数.
NSInteger linesWithoutClipping = floor(initialPageHeight / theFont.lineHeight);
CGFloat optimalPageHeight = linesWithoutClipping * theFont.lineHeight;
Run Code Online (Sandbox Code Playgroud)
获取最低值18并乘以字体行高度16,我们得到最佳页面高度,288以确保没有剪切.
请注意,lineHeight是在iOS 4.0中引入的,但如果旧版本需要,您可以自己计算.
| 归档时间: |
|
| 查看次数: |
6459 次 |
| 最近记录: |