为所有人准备的CoreText
受TextKit启发的简单CoreText封装层。将多字符串堆叠在一起,并在视图中显示或手动在drawRect:实现中显示。需要绘制大量文本(如特定手表?)这可能很有用。
由两个主要对象PINCHTextLayout
和PINCHTextRenderer
组成,这个小的框架应该使将字符串堆叠绘制到屏幕上变得容易得多,每个字符串都有自己的属性。框架添加了一些对我们自己项目所需的功能(如下划线裁剪),但设计得尽可能通用。如图所示,将布局包裹在矩形中也不成问题。
可以使用PINCHTextView
、类似于UILabel的PINCHTextLabel
或在您的drawRect:实现中手动绘制布局对象的渲染。将textView中的debugRendering
设置为YES
显示每个布局和每个单独行的绘制位置
要运行示例项目,首先从仓库克隆,然后从Example目录中运行pod install
为了在屏幕上获得最基本的布局,请尝试以下操作
PINCHTextLayout *layout = [[PINCHTextLayout alloc] initWithString:@"Hello world!" attributes:@{PINCHTextLayoutFontAttribute: [UIFont systemFontOfSize:17]} name:@"hello"];
PINCHTextView *textView = [[PINCHTextView alloc] initWithFrame:self.view.bounds textLayouts:@[layout]];
[self.view addSubview:textView];
要在上下文中绘制布局(如从drawRect:),以下可能设置您正确的路径
PINCHTextRenderer *renderer = [[PINCHTextRenderer alloc] init];
renderer.textLayouts = @[layout];
[renderer renderTextLayoutsInContext:context withRect:rect];
添加一个矩形来包裹布局不是问题
CGRect clipRect = CGRectMake(10, 50, 100, 100);
self.textView.renderer.clippingRect = clipRect;
在所提供的示例应用中,点击屏幕并移动触摸添加裁剪矩形到textView。
PINCHTextRenderer
实例将通过PINCHTextRendererDelegate
协议通知您其进度。这允许您在渲染布局后面、上面或围绕它们绘制额外的图形。以下列出的委托方法可以绘制布局后面的容器,例如。
- (void)textRenderer:(PINCHTextRenderer *)textRenderer willRenderTextLayouts:(NSArray *)textLayouts inBoundingRect:(CGRect)rect withContext:(CGContextRef)context;
PINCHTextRendering应该在iOS 6及更高版本上运行,尽管如果所有NSAttributedString属性都替换为它们的CoreText对应项,iOS 5的支持可能也是可行的。但在创建时这似乎不是必要的。
将以下导入添加到您的文件中,您就可以访问最常用的类了
#import <PINCHTextRendering/PINCHTextRendering.h>
Pim Coumans,[email protected]
PINCHTextRendering遵从MIT许可证。更多信息请参阅LICENSE文件。