【问题标题】:Confused about UIView frame property对 UIView 框架属性感到困惑
【发布时间】:2010-03-30 22:42:43
【问题描述】:

我正在构建一个用于绘制图表的原型 iPad 应用程序。我有以下视图层次结构:

UIView UIScrollView 图表视图:UIView 标签栏 导航栏

还有一个 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 的矩形不是我设置的大小,而且我的绘图在底部被剪裁了。它接近我设置的尺寸,但宽度更大,高度更短。

另外值得注意的是,如果我强制框架比我知道的图表需要的大得多,那么 drawRect:rect 就足够大了,并且不会发生剪裁。当然,这让我想知道框架大小是否需要考虑其他一些屏幕空间,比如工具栏,但是我对文档的阅读告诉我框架位于超级视图坐标中,这将是滚动视图,所以我认为我不需要需要担心这些事情。

知道造成这种差异的原因是什么吗?

【问题讨论】:

  • 我认为您的描述中没有任何问题。检查 contentMode 和 contentStretch 属性的组合是否导致视图调整大小。
  • 我尝试在滚动视图和图表视图上设置这些,但没有任何改变。 :(

标签: iphone uiview ipad frame


【解决方案1】:

需要注意的一点是,非 3G S iPhone(甚至在我的 MacBook Air 上的模拟器中)的最大纹理尺寸为 2048 x 2048。如果您尝试创建超过此值的视图或图层在任一维度上,通常它根本不会显示,或者如果显示,它可能会以某种方式被剪裁。显然,我还没有在 iPad 上测试过它是否有相同的纹理大小限制。

如果您需要像这样非常大的视图,推荐的解决方法是使用 CATiledLayer 或由 CATiledLayer 支持的 UIView。您应该能够通过覆盖以下方法在您的 UIView 子类中指定这一点:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多