Swift Package Manager macOS iOS tvOS watchOS

ScaledToFit

ScaledToFit 是一个小型的库,提供函数来放大或缩小一个矩形的大小,使其能够适应另一个矩形的大小。缩放过程中会保持宽高比不变。

该 SPM 包包含一个示例 SwiftUI 项目,其中还包含可视化测试,用于展示缩放的工作方式,并可用于验证其正确性。

以下截图展示了缩放的实际效果

用法

缩放逻辑本身在泛型 Size 类型中可用,它适用于任何 FloatingPoint 类型的 (width, height) 元组。因此,任何代码都可以使用它,无论大小或矩形的实际类型如何。

let scaledSize = Size.scaledToFit(orinigalSize: (10, 15), size: (20, 30))

对于 CGSize 类型,还有一个方便的扩展,可用于 Apple 的所有平台 SDK。

let originalSize = CGSize(width: 10, height: 15)
let containerSize = CGSize(width: 20, height: 30)
let scaledSize = originalSize.scaledToFit(size: containerSize)

如果只想缩小,请使用 scaledDownToFit

let scaledSize = originalSize.scaledDownToFit(maxSize: containerSize)

新的尺寸将是原始尺寸的较小版本。如果原始尺寸完全适合提供的容器尺寸,该函数将返回 nil,表明不需要缩放。在这种情况下,您可以回退到原始尺寸。

let scaledSize = originalSize.scaledDownToFit(maxSize: containerSize) ?? originalSize

类似地,如果只想放大,请使用 scaledUpToFit。新的尺寸将是原始尺寸的较大版本,如果不需要缩放,则返回 nil

使用 Swift Package Manager 安装

使用此 URL 作为依赖项:https://github.com/WilhelmOks/ScaledToFit.git