iphone - 使用 CATiledLayer 绘制文本

标签 iphone objective-c ios core-graphics

我有一个 UIView 子类 MyTextView,我将它添加到 scrollView 中,它只有一堆文本,但它可以有时真的很长(大约 50,000 像素高)。使用常规绘图方法,例如 NSString 的 drawInRect 方法显然不是正确的方法,所以现在我正在研究 CATiledLayer 来提供帮助我出去画文字。不幸的是,没有足够的示例可以帮助使用 CATiledLayer 绘制文本,我想知道是否有人知道我如何开始这项任务。

在 UIScrollView 中绘制超长文本时,使用 CATiledLayer 是我的最佳选择吗?

(我不想使用 UITextView 因为它也是可滚动的 - 即使我要使用它,我也不希望它是可滚动的,我会设置它的框架到 50,000 像素高,这并不能解决我的问题(请记住,我会将此 View 添加到 scrollView,因此 scrollView 中的 UITextView 并不是很有趣)。

有什么想法吗?

最佳答案

我不知道 CATiledLayer 是最好的,但为了让您入门,您可以自己绘制每个图 block 的文本内容。

创建图层并设置委托(delegate):

   CATiledLayer *tiledLayer = [CATiledLayer layer];
    tiledLayer.delegate = self;
    tiledLayer.tileSize =  CGSizeMake(768, 1024);
    tiledLayer.levelsOfDetail = 4;
    tiledLayer.levelsOfDetailBias = 2;
//etc.....

然后就是正常的CGContext绘图代码:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx

您可以获得用于绘图的平铺矩形和/或比例

CGRect rect = CGContextGetClipBoundingBox(ctx);
CGFloat scale = CGContextGetCTM(ctx).a;

文档中关于设置层委托(delegate)的一句话:

In iOS, if the layer is associated with a UIView object, this property must be set to the view that owns the layer.

关于iphone - 使用 CATiledLayer 绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526501/

相关文章:

iphone - iPhone 应用程序的教程客户端/服务器

iOS EXC_BAD_ACCESS(代码=1,地址=0x0)仅在 iOS 9 上崩溃

ios - 从 contact.bodyA.node 获取自定义类属性

iphone - Apple 的 Reachability 类是否有更复杂的替代品?

iphone - 用于检查 iPhone 与 USB 的连接的应用程序

ios - 后退按钮不返回

iphone - UIScrollview 中的 UIImage

ios - 在 Swift 中注册远程通知时未收到设备 token

iphone - 是否可以从 iPhone GPS 获取原子钟时间戳?

ios - Theos实例方法调用