2010-03-30 181 views
1

我正在構建一個繪製圖表的原型iPad應用程序。我有以下看法層次:對UIView框架屬性感到困惑

的UIView 的UIScrollView DiagramView:UIView的 的TabBar 導航欄

而一個UIViewController子類都抱着一起。

在第一次繪製圖表之前,我計算圖的尺寸,並將DiagramView框架設置爲該尺寸,並將scrollview的內容大小也設置爲。

-(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足夠大,並且不會發生剪裁。當然,這讓我想知道框架大小是否需要考慮像工具欄一樣的其他屏幕空間,但是我閱讀文檔告訴我框架在超視圖座標中,這將是滾動視圖,所以我認爲我不會需要擔心這樣的事情。

任何想法是什麼導致這種差異?

+0

我不認爲你的描述中有任何東西指向一個問題。檢查contentMode和contentStretch屬性的組合是否導致視圖被調整大小。 – NWCoder 2010-03-30 22:52:05

+0

我嘗試在scrollview和圖視圖上設置這些,但沒有任何更改。 :( – user157196 2010-03-30 23:22:47

回答

4

需要注意的一件事是,非3G iPhone(甚至在我的MacBook Air上的模擬器上)的最大紋理尺寸是2048 x 2048.如果您嘗試創建超出視圖或圖層超過這在任何一個維度,通常它不會顯示,或者如果它可能會以某種方式剪裁。很顯然,我沒有在iPad上測試過它,看它是否具有相同的紋理尺​​寸限制。

如果您需要這樣一個非常大的視圖,推薦的方法是使用CATiledLayer或由CATiledLayer支持的UIView。你應該能夠通過覆蓋以下方法在你的UIView子類中指定:

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

這是很好的信息...謝謝多布拉德! – user157196 2010-03-31 03:34:51

+0

你應該接受答案user157196 – griotspeak 2010-11-04 03:04:57