【问题标题】:CATiledLayer to draw giant UIView with buttons?CATiledLayer 用按钮绘制巨型 UIView?
【发布时间】:2011-04-27 11:30:59
【问题描述】:

我有这个巨大的 UIView 和大约 600 个 UIButtons 作为子视图。 UIView 大约是 2000 x 2000 像素,它本身就是 UIScrollView 的子视图。我正在尝试将CATiledLayer 实现为这个巨型UIView 的渲染层,但我似乎无法弄清楚如何渲染瓷砖。我发现了很多例子,这些例子涵盖了CATiledLayer 的平铺图像、pdf ......但我从来没有找到一个真实的例子来说明如何绘制一个包含大量子视图的完整 UIView。您可能会问我为什么要坚持使用UIView?因为我希望用户继续使用按钮与视图进行交互。

我想知道是否有人有关于如何实现 - (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context 方法的示例或一些伪代码,请记住,有 1 个巨大的 UIView 有很多 UIbuttons 作为其子视图。

【问题讨论】:

    标签: performance uiview catiledlayer


    【解决方案1】:

    从 iOS 4.0 开始,您可以使用 drawRect: 代替 drawLayer:inContext:。来自 Apple 的问答对此进行了解释:http://developer.apple.com/library/ios/#qa/qa1637/_index.html。重要的一点是 drawRect: in 4 现在是线程安全的,您可以使用 UIKit 图形功能。

    你仍然需要重写这个方法来使用CATileLayer

    +(Class)layerClass
    {
        return [CATiledLayer class];
    }
    

    但是你现在可以使用drawRect:

    -(void)drawRect:(CGRect)rect
    {
        //normal drawing routines here.
    }
    

    传递给该方法的矩形将是图块的大小,您需要确定需要在特定矩形中绘制什么。 CATiledLayer 的强大之处在于它只需要绘制屏幕上显示的图块。它还使用后台线程并且非常快。

    我没有在 UIViews 中使用 CATiledLayer,只有大图像。 UIViews 子类是否有自己的 drawRect: 实现?我认为您需要确定当前矩形中将显示哪些视图并调用它们的drawRect: 方法。

    drawRect: 仅适用于 iOS 4.0 及更高版本,不适用于旧版本。

    【讨论】:

    • 感谢您的解释,但我正在 iPad 上开发 3.2 或更高版本,所以这还不能真正回答我的问题。无论如何,为信息投票!
    • 我在使用 iOS 4 回答之前写了一个小演示应用程序。有机会我会尽快重做 3.2。
    • 很抱歉重新提出一个老问题,但您有没有运气让它在 pre4.0 版本上工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多