设置NSView的规模

时间:2016-07-30 14:16:31

标签: swift macos cocoa scale nsview

我将NSView子类化以使其可扩展。关注苹果' View Geometry'引导,边界应拉伸以适应框架。 设置帧大小时,没有任何变化。当我将帧大小打印到控制台时,我看到setFrameSize几乎没有任何作用。

所以我的问题是:如何更改设置的帧大小(不设置设置边界大小)? (禁用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)
    }
}

1 个答案:

答案 0 :(得分:2)

你确定你不是要设置边界而不是框架吗?改变框架将改变其父坐标系统中视图的大小,从而不仅仅改变其内容和#39;规模,但也在其超视图中出现。如果您只想缩放视图的内容,View Geometry指南会说:

  

要平移或缩放坐标系,可以更改视图的边界矩形。更改边界矩形会设置基本坐标系,视图开始执行所有绘制。 NSView的具体子类通常在initWithFrame:方法中或在加载包含视图的nib文件时立即根据需要更改bounds矩形。