【问题标题】:Drawing text using CATiledLayer使用 CATiledLayer 绘制文本
【发布时间】:2012-05-10 01:48:06
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: iphone objective-c ios core-graphics


    【解决方案1】:

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

    创建图层并设置委托:

       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;
    

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

    在 iOS 中,如果图层与 UIView 对象相关联,则此属性 必须设置为拥有该层的视图。

    【讨论】:

    • 创建该层后我将如何处理它?我如何将它添加到视图中?
    • 我做了[self.view.layer addSublayer:tiledLayer]; [self.view.layer setNeedsDisplay]; 但委托方法永远不会被调用..
    • 只是一个想法,但是您设置了 tiledLayer 框架吗?没有一些代码很难说。您可以尝试创建一个单独的委托类来处理 drawLayer 调用,并在您的 UIView 类中实例化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多