我正在构建一个绘制图表的原型iPad应用程序。我有以下视图层次结构:
的UIView UIScrollView中 DiagramView:UIView 的TabBar 导航栏
UIViewController子类将所有这些结合在一起。
在绘制图表之前,我第一次计算图表的尺寸,并将DiagramView框架设置为该尺寸,以及滚动视图的内容大小。
-(void)recalculateBounds
{
[renderer diagram:diagram shouldDraw:NO];
SQXRect diagramRect = SQXMakeRect(0.0,0.0,[diagram bounds].size.width,[diagram bounds].size.height);
self.frame = diagramRect;
[(UIScrollView*)[self superview] setContentSize:diagramRect.size];
}
我应该透露框架设置为大约1500 x 3500,我知道这是荒谬的。在开始优化渲染代码之前,我只想关注应用程序的其他部分。
这很好用,除了传递给drawRect的rect不是我设置的大小,我的绘图在底部被剪裁。它接近我设定的尺寸,但宽度更大,高度更短。
另外值得注意的是,如果我强制框架比我知道图表需要的大得多,那么drawRect:rect足够大,并且不会发生剪切。当然,这让我想知道框架大小是否需要考虑其他屏幕空间,如工具栏,但我对文档的阅读告诉我框架是超视图坐标,这将是滚动视图所以我认为我不要需要担心这些事情。
知道是什么导致了这种差异吗?
答案 0 :(得分:4)
要注意的一点是,非3G S iPhone上的最大纹理尺寸(甚至在MacBook Air上的模拟器中)是2048 x 2048.如果您尝试创建超过此值的视图或图层在任何一个维度中,通常它根本不会显示,或者如果它确实可能会以某种方式被剪切。显然,我没有在iPad上测试它,看它是否有相同的纹理大小限制。
如果您需要这样的非常大的视图,建议的方法是使用CATiledLayer或由CATiledLayer支持的UIView。您应该能够通过重写以下方法在UIView子类中指定它:
+ (Class) layerClass
{
return [CATiledLayer class];
}