【问题标题】:.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)