fix: 固定首页常用应用图标尺寸

This commit is contained in:
2026-07-16 19:02:00 +08:00
parent 5f1c22c6a8
commit 3d5ad8a614
4 changed files with 104 additions and 26 deletions

View File

@ -8,14 +8,49 @@ import UIKit
/// / SF Symbol
enum HomeMenuIconFactory {
/// 使
static let canvasSize = CGSize(width: 24, height: 24)
/// 2426pt
static let symbolConfiguration = UIImage.SymbolConfiguration(pointSize: 18, weight: .medium)
/// Assets SF Symbol
private static let imageCache = NSCache<NSString, UIImage>()
/// Assets SF Symbol
static func image(named iconName: String) -> UIImage? {
if let asset = UIImage(named: iconName) {
return asset
let cacheKey = iconName as NSString
if let cachedImage = imageCache.object(forKey: cacheKey) {
return cachedImage
}
return UIImage(systemName: iconName, withConfiguration: symbolConfiguration)
guard let sourceImage = UIImage(named: iconName)
?? UIImage(systemName: iconName, withConfiguration: symbolConfiguration) else {
return nil
}
let normalizedImage = renderOnFixedCanvas(sourceImage)
imageCache.setObject(normalizedImage, forKey: cacheKey)
return normalizedImage
}
private static func renderOnFixedCanvas(_ image: UIImage) -> UIImage {
let sourceSize = image.size
guard sourceSize.width > 0, sourceSize.height > 0 else {
return image
}
let scale = min(canvasSize.width / sourceSize.width, canvasSize.height / sourceSize.height)
let drawSize = CGSize(width: sourceSize.width * scale, height: sourceSize.height * scale)
let drawRect = CGRect(
x: (canvasSize.width - drawSize.width) / 2,
y: (canvasSize.height - drawSize.height) / 2,
width: drawSize.width,
height: drawSize.height
)
let renderer = UIGraphicsImageRenderer(size: canvasSize)
let renderedImage = renderer.image { _ in
image.withRenderingMode(.alwaysOriginal).draw(in: drawRect)
}
return renderedImage.withRenderingMode(.alwaysTemplate)
}
}