【问题标题】:.aspectFill on NSImageView.aspectFill 上的 NSImageView
【发布时间】:2023-03-05 10:29:01
【问题描述】:

我正在将我的 SpriteKit 应用程序从 iOS 移植到 MacOS。我正在 main.storyboard 中设计我的主菜单,并且我有一个图像作为背景。但是,当我调整窗口大小时,我的图像并没有填满整个屏幕。

我试过了:

.scaleAxesIndependently //???
.scaleNone //Centre
.scaleProportionallyDown //???
.scaleProportionallyUpOrDown //AspectFit

但没有一个与.aspectFill 相同。

我正在使用swift

【问题讨论】:

标签: swift macos nsimageview


【解决方案1】:

子类化NSImageView 并覆盖intrinsicContentSize,您将能够调整图像的大小保持纵横比,如下所示:

class AspectFillImageView: NSImageView {
    override var intrinsicContentSize: CGSize {
        guard let img = self.image else { return .zero }

        let viewWidth = self.frame.size.width
        let ratio = viewWidth / img.size.width
        return CGSize(width: viewWidth, height: img.size.height * ratio)
    }
}

如果您只想填充整个视图而忽略比例,请改用此扩展:

extension NSImage {
    func resize(to size: NSSize) -> NSImage {
        return NSImage(size: size, flipped: false, drawingHandler: {
            self.draw(in: $0)
            return true
        })
    }
}

扩展用法:

NSImage.resize(to: self.view.frame.size)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多