2016-07-30 51 views
1

我使用NSView的子類來使其具有可伸縮性。繼蘋果公司的'View Geometry'指南,邊界應伸展到適合框架。 當設置幀大小時,沒有任何變化。當我將框架大小打印到控制檯時,我看到setFrameSize完全沒有做任何事情。NSView的設置比例

所以在這裏我的問題:如何更改設置的框架大小(沒有設置設置界限大小)? (Autolayout禁用)

class ScaledView : NSView { 
    let scale: CGFloat 
    let element: Drawable 

    required init?(coder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") // not needed, adding it programmatically 
    } 

    init(frame frameRect: NSRect, scale: CGFloat, toDraw element: DoubleValue) { 
     self.scale = scale 
     self.element = element; 
     super.init(frame: frameRect) 
     self.setFrameSize(CGSize(width: self.bounds.size.width * scale, height: self.bounds.size.height * scale)) 
    } 

    override func drawRect(dirtyRect: NSRect) { 
     element.draw(dirtyRect, parent: self) 
    } 
} 

回答

2

您確定您不是想要設置邊界而不是框架?改變框架將改變視圖在其父座標系中的大小,從而不僅改變其內容的縮放比例,還改變其在超視圖內的外觀。如果您只是要縮放視圖的內容,則視圖幾何指南中會提到:

要轉換或縮放座標系,請更改視圖的邊界矩形。改變邊界矩形設置了基本座標系統,由視​​圖執行的所有繪製開始。 NSView的具體子類通常會根據initWithFrame:方法中需要立即更改邊界矩形,或者加載包含視圖的nib文件。

+0

事情是,我想繪製我的內容的全尺寸和縮小,所以我雖然有一個較小的框架和更大的邊界。所以這就是爲什麼我改變框架。任何想法如何解決? – Jofkos

+1

當然 - 讓框架成爲它將要發生的一切(再次,這就是視圖如何出現在屏幕上,並且可能由用戶或窗口控制),然後將界限設置爲您希望的任何內容。您可以將邊框設置爲比框架大或比框架小,以分別縮放視圖的內容。 – andyvn22

+0

謝謝,就是這樣。我不知道爲什麼我沒有想到... – Jofkos