performance - CATiledLayer 用按钮绘制巨大的 UIView?

标签 performance uiview catiledlayer

我有这个巨大的 UIView ,其中有大约 600 个 UIButtons 作为 subview 。 UIView 大约为 2000 x 2000 像素,它本身是 UIScrollView 的 subview 。我正在尝试实现 CATiledLayer 作为这个巨大的 UIView 的渲染层,但我似乎不知道如何渲染图 block 。我发现了很多使用平铺图像、pdf 等覆盖 CATiledLayer 的示例,但我从未找到有关如何绘制具有大量 subview 的完整 UIView 的真实示例。您可能会问为什么我想坚持使用 UIView?因为我希望用户继续使用按钮与 View 交互。

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

最佳答案

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

您仍然需要重写此方法才能使用 CATileLayer:

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

但是你现在可以只使用drawRect:

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

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

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

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

关于performance - CATiledLayer 用按钮绘制巨大的 UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5803348/

相关文章:

ios - 以编程方式创建 GridView

java - Java运行时本身占用的堆空间

ios - 提高绘图性能(针对 Dudel 应用程序)

java - 慢速 hibernate 刷新

ios - 创建动画时,为什么要向 UIView 类属性发送消息?

iphone - 从 super View 中删除后保持图像在 View 中

performance - Chromium 自定义构建运行速度太慢

iphone - 带有选项的 UIView drawRect 方法

iOS CATiledLayer 崩溃

ios - CATiledLayer 内部是如何工作的