我将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)
}
}
答案 0 :(得分:2)
你确定你不是要设置边界而不是框架吗?改变框架将改变其父坐标系统中视图的大小,从而不仅仅改变其内容和#39;规模,但也在其超视图中出现。如果您只想缩放视图的内容,View Geometry指南会说:
要平移或缩放坐标系,可以更改视图的边界矩形。更改边界矩形会设置基本坐标系,视图开始执行所有绘制。 NSView的具体子类通常在initWithFrame:方法中或在加载包含视图的nib文件时立即根据需要更改bounds矩形。