我正在将我的 SpriteKit 应用程序从 iOS 移植到 MacOS。我正在 main.storyboard 中设计我的主菜单,我有一个图像作为背景。然而,当我调整窗口大小时,我的图像并没有填满整个屏幕。
我试过了:
.scaleAxesIndependently //???
.scaleNone //Centre
.scaleProportionallyDown //???
.scaleProportionallyUpOrDown //AspectFit
但没有一个与
.aspectFill
相同。我正在使用
swift
最佳答案
子类化 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)
}
}
如果您只想填充整个 View 而忽略比例,请改用此扩展名:
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)
关于swift - NSImageView 上的 .aspectFill,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51274931/