我有这个巨人UIView
,大约有600 UIButtons
个子视图。 UIView
约为2000 x 2000像素,它是UIScrollView
的子视图。我正在尝试将CATiledLayer
实现为此巨型UIView
的渲染层,但我似乎无法弄清楚如何渲染切片。我找到了许多用CATiledLayer
覆盖平铺图像,pdf,...的例子,但是我从来没有找到一个关于如何用很多子视图绘制完整UIView的真实例子。你可能会问我为什么要坚持使用UIView
?因为我希望用户继续使用按钮与视图进行交互。
我想知道某人是否有关于如何实现- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context
方法的示例或一些伪代码,请记住,有一个巨大的UIView
有很多UIbuttons
它的子视图。
答案 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及更高版本,它不适用于旧版本。