swift - 设置 NSView 的比例

标签 swift macos cocoa scale nsview

我将 NSView 子类化以使其可扩展。以下苹果 ' View Geometry ' 指南,边界应拉伸(stretch)以适合框架。 设置框架大小时,没有任何变化。当我将帧大小打印到控制台时,我看到 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)
    }
}

最佳答案

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

To translate or scale the coordinate system, you alter the view's bounds rectangle. Changing the bounds rectangle sets up the basic coordinate system with which all drawing performed by the view begins. Concrete subclasses of NSView typically alter the bounds rectangle immediately as needed in their initWithFrame: methods or upon loading a nib file that contains the view.

关于swift - 设置 NSView 的比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674901/

相关文章:

ios - 快速播放录制的音频

swift - UILabel 有错误的框架。 swift

ios - let (constant) 表现得像一个函数的语法。你可以解释吗?

macos - mac 从 sleep 模式恢复后运行苹果脚本

objective-c - 如何从 Cocoa 检索 iTunes 路径?

iphone - cocos2d Sprite 当前位置

ios - 白名单推特登录仍然收不到邮件

objective-c - NSTextView - 如何检测何时单击?

objective-c - 从 NSTokenField 获取 token

iphone - NSInternalInconsistencyException 无法加载 nib ind 包