CATiledLayer用按钮绘制巨型UIView?

时间:2011-04-27 11:31:00

标签: performance uiview catiledlayer

我有这个巨人UIView,大约有600 UIButtons个子视图。 UIView约为2000 x 2000像素,它是UIScrollView的子视图。我正在尝试将CATiledLayer实现为此巨型UIView的渲染层,但我似乎无法弄清楚如何渲染切片。我找到了许多用CATiledLayer覆盖平铺图像,pdf,...的例子,但是我从来没有找到一个关于如何用很多子视图绘制完整UIView的真实例子。你可能会问我为什么要坚持使用UIView?因为我希望用户继续使用按钮与视图进行交互。

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

1 个答案:

答案 0 :(得分:3)

从iOS 4.0开始,您可以使用drawRect:代替drawLayer:inContext:。 Apple的这个Q& A解释了它: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的强大之处在于它只需要绘制屏幕上显示的图块。它还使用后台线程,速度非常快。

我没有将CATiledLayer与UIViews一起使用,只使用大图像。 UIViews子类是否具有自己的drawRect:实现?我想你需要确定哪些视图会在当前的rect中显示并调用它们的drawRect:方法。

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