我有这个巨大的 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/