【问题标题】:Set scale of NSView设置 NSView 的比例
【发布时间】:2016-07-30 14:16:30
【问题描述】:

我将 NSView 子类化以使其具有可扩展性。按照 Apple 的“View Geometry”指南,边界应拉伸以适合框架。 设置帧大小时,没有任何变化。当我将帧大小打印到控制台时,我看到 setFrameSize 实际上什么也没做。

所以我的问题是:如何更改设置的帧大小(不设置设置的边界大小)? (禁用自动布局)

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)
    }
}

【问题讨论】:

    标签: swift macos cocoa scale nsview


    【解决方案1】:

    您确定您不是要设置边界,而不是框架吗?更改框架将更改视图在其父级坐标系中的大小,从而不仅更改其内容的比例,还更改其在其父视图中的外观。如果你只是想缩放视图的内容,视图几何指南说:

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

    【讨论】:

    • 问题是,我想以全尺寸绘制我的内容并按比例缩小,所以我想有一个更小的框架和更大的界限。所以这就是为什么我想改变框架。知道如何解决吗?
    • 当然——让框架成为它的样子(同样,这就是视图在屏幕上的显示方式,并且可能由用户或窗口或其他东西控制),然后将你的界限设置为无论你希望它是什么。您可以将边界设置为大于框架或小于框架,以分别缩小或放大视图的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2015-03-09
    • 2011-11-24
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多