44 lines
1.6 KiB
Swift
44 lines
1.6 KiB
Swift
//
|
|
// MainScanTabItem.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import UIKit
|
|
|
|
/// 主 TabBar 中间扫码核销入口。
|
|
enum MainScanTabItem {
|
|
|
|
/// 构建扫码 TabBarItem,点击行为由 `MainTabBarController` 拦截。
|
|
static func makeTabBarItem() -> UITabBarItem {
|
|
let image = makeScanImage()
|
|
let item = UITabBarItem(title: nil, image: image, selectedImage: image)
|
|
item.accessibilityLabel = "扫码核销"
|
|
item.accessibilityIdentifier = "main.scan"
|
|
return item
|
|
}
|
|
|
|
private static func makeScanImage() -> UIImage {
|
|
let diameter: CGFloat = 48
|
|
let renderer = UIGraphicsImageRenderer(size: CGSize(width: diameter, height: diameter))
|
|
return renderer.image { _ in
|
|
let bounds = CGRect(origin: .zero, size: CGSize(width: diameter, height: diameter))
|
|
AppColor.primary.setFill()
|
|
UIBezierPath(ovalIn: bounds).fill()
|
|
|
|
let configuration = UIImage.SymbolConfiguration(pointSize: 25, weight: .semibold)
|
|
guard let symbol = UIImage(systemName: "qrcode.viewfinder", withConfiguration: configuration) else {
|
|
return
|
|
}
|
|
let image = symbol.withTintColor(.white, renderingMode: .alwaysOriginal)
|
|
let symbolSize = CGSize(width: 28, height: 28)
|
|
let symbolRect = CGRect(
|
|
x: (diameter - symbolSize.width) / 2,
|
|
y: (diameter - symbolSize.height) / 2,
|
|
width: symbolSize.width,
|
|
height: symbolSize.height
|
|
)
|
|
image.draw(in: symbolRect)
|
|
}.withRenderingMode(.alwaysOriginal)
|
|
}
|
|
}
|