| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- //
- // UIImage+Theme.swift
- // Lanu
- //
- // Created by OneeChan on 2025/11/20.
- //
- import Foundation
- private var customColorImage: [String: UIImage] = [:]
- extension UIImage {
- static func generateLinearGradientImage(
- colors: [UIColor],
- size: CGSize,
- location: [NSNumber] = [0, 1],
- startPoint: CGPoint = CGPoint(x: 0, y: 0),
- endPoint: CGPoint = CGPoint(x: 1, y: 0)
- ) -> UIImage? {
- guard colors.count >= 2, size.width > 0, size.height > 0 else {
- return nil
- }
- // 创建渐变图层
- let gradientLayer = CAGradientLayer()
- gradientLayer.frame = CGRect(origin: .zero, size: size)
- gradientLayer.colors = colors.map { $0.cgColor } // 转换为 CGColor
- gradientLayer.locations = location
- gradientLayer.startPoint = startPoint
- gradientLayer.endPoint = endPoint
-
- // 渲染图层为图片
- let renderer = UIGraphicsImageRenderer(size: size)
- return renderer.image { _ in
- gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
- }
- }
-
- static func image(for color: UIColor, size: CGFloat = 10, cornerRadius: CGFloat? = nil) -> UIImage {
- let key = "fill_\(color.hash)_\(size)_\(cornerRadius ?? 0)"
- if let cache = customColorImage[key] {
- return cache
- }
- let imageSize = CGSize(width: size, height: size)
- let renderer = UIGraphicsImageRenderer(size: imageSize)
- let newImage = renderer.image { context in
- let rect = CGRect(origin: .zero, size: imageSize)
- color.setFill()
- if let cornerRadius {
- let path = UIBezierPath(
- roundedRect: rect,
- cornerRadius: min(cornerRadius, size/2)
- )
- path.fill()
- } else {
- context.fill(CGRect(origin: .zero, size: imageSize))
- }
- }
- customColorImage[key] = newImage
- return newImage
- }
-
- static let primary_3: UIImage? = {
- let size = CGSize(width: 10, height: 10)
- let renderer = UIGraphicsImageRenderer(size: size)
- return renderer.image { context in
- UIColor.primary_3.setFill()
- context.fill(CGRect(origin: .zero, size: size))
- }
- }()
-
- static let fill: UIImage? = {
- let size = CGSize(width: 10, height: 10)
- let renderer = UIGraphicsImageRenderer(size: size)
- return renderer.image { context in
- UIColor.fill.setFill()
- context.fill(CGRect(origin: .zero, size: size))
- }
- }()
-
- static let primary_6: UIImage? = {
- var view = UIView()
- view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
- let layer0 = CAGradientLayer()
- layer0.colors = [
- UIColor(red: 0.719, green: 0.932, blue: 1, alpha: 1).cgColor,
- UIColor(red: 0.865, green: 1, blue: 0.719, alpha: 1).cgColor,
- UIColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
- ]
- layer0.locations = [0, 0.36, 1]
- layer0.startPoint = CGPoint(x: 0.25, y: 0.5)
- layer0.endPoint = CGPoint(x: 0.75, y: 0.5)
- layer0.transform = CATransform3DMakeAffineTransform(CGAffineTransform(a: 0.75, b: -0.01, c: 0, d: 0.75, tx: 0, ty: 0.12))
- layer0.bounds = view.bounds.insetBy(dx: -0.5*view.bounds.size.width, dy: -0.5*view.bounds.size.height)
- layer0.position = view.center
- view.layer.addSublayer(layer0)
-
- let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
- return renderer.image { _ in
- view.layer.render(in: UIGraphicsGetCurrentContext()!)
- }
- }()
-
- static let primary_7: UIImage? = {
- var view = UIView()
- view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
- let layer0 = CAGradientLayer()
- layer0.colors = [
- UIColor(hex: "#4ED2FF").cgColor,
- UIColor(hex: "#95E789").cgColor
- ]
- layer0.locations = [0, 1]
- layer0.startPoint = CGPoint(x: 0.25, y: 0.5)
- layer0.endPoint = CGPoint(x: 0.75, y: 0.5)
- layer0.transform = CATransform3DMakeAffineTransform(CGAffineTransform(a: 1.37, b: 0, c: 0, d: 1.37, tx: 0, ty: -0.19))
- layer0.bounds = view.bounds
- layer0.position = view.center
- view.layer.addSublayer(layer0)
-
- let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
- return renderer.image { _ in
- view.layer.render(in: UIGraphicsGetCurrentContext()!)
- }
- }()
-
- static let primary_8: UIImage? = {
- var view = UIView()
- view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
- let layer0 = CAGradientLayer()
- layer0.colors = [
- UIColor(red: 0.183, green: 0.586, blue: 1, alpha: 1).cgColor,
- UIColor(red: 0.313, green: 1, blue: 0.847, alpha: 1).cgColor
- ]
- layer0.locations = [0.28, 1]
- layer0.startPoint = CGPoint(x: 0.25, y: 0.5)
- layer0.endPoint = CGPoint(x: 0.75, y: 0.5)
- layer0.transform = CATransform3DMakeAffineTransform(CGAffineTransform(a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0.5))
- layer0.bounds = view.bounds.insetBy(dx: -0.5*view.bounds.size.width, dy: -0.5*view.bounds.size.height)
- layer0.position = view.center
- view.layer.addSublayer(layer0)
-
- let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
- return renderer.image { _ in
- view.layer.render(in: UIGraphicsGetCurrentContext()!)
- }
- }()
- }
|