2012-09-25 50 views
0

我正在調整大小問題,我認爲這是因爲我對框架和邊界的瞭解不夠。框架和邊界(調整大小) - 可可

我有一個滾動視圖,它填充窗口內的自定義視圖。當我調整窗口大小時,我希望自定義視圖保持在原來的位置,慢慢地被鼠標拖動處的窗口覆蓋/未覆蓋。

真正發生的事情是自定義視圖保持錨定在滾動視圖的左下角,這樣如果我縮短窗口,自定義視圖向上滑動以保持其左下角觸摸滾動視圖角。

如何在不移動特定視圖的情況下調整窗口大小?

回答

1

frame是該視圖將在其父項中佔用的區域。 bounds是將在其框架內繪製的視圖部分。因此,兩者在99.99%的時間有所不同,它們具有相同的size,但邊界的原點爲零,並且該幀具有非零原點。

這就是說,這聽起來更像是你對座標系統感到困惑。 OS X遵循位於屏幕左下角邊緣的原點圖紙慣例。因此,您的滾動視圖的原點位於窗口的左下角,導致該點在調整大小時成爲錨點。滾動視圖的框架和邊界的大小發生變化,但原點不變。 (?)

假設你想左上角到錨定,而不是左下方,可能是最容易做的事情將是繼承NSScrollView並覆蓋- setFrame:做相應的計算 - 抓取當前documentVisibleRect,制定出什麼在左上方,允許super設置新框架,然後適當地調用scrollToPoint

1

如果要將文檔視圖固定在左上角,可以在文檔視圖中覆蓋isFlipped以返回YES。在這種情況下,y座標將被翻轉,您可能需要執行一些計算調整。

- (BOOL)isFlipped 
{ 
    return YES; 
} 
相關問題