UIImage+Theme.swift 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //
  2. // UIImage+Theme.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/20.
  6. //
  7. import Foundation
  8. private var customColorImage: [UIColor: UIImage] = [:]
  9. extension UIImage {
  10. static func image(for color: UIColor, size: CGFloat = 10, cornerRadius: CGFloat? = nil) -> UIImage {
  11. if let cache = customColorImage[color] {
  12. return cache
  13. }
  14. let imageSize = CGSize(width: size, height: size)
  15. let renderer = UIGraphicsImageRenderer(size: imageSize)
  16. let newImage = renderer.image { context in
  17. let rect = CGRect(origin: .zero, size: imageSize)
  18. color.setFill()
  19. if let cornerRadius {
  20. let path = UIBezierPath(
  21. roundedRect: rect,
  22. cornerRadius: min(cornerRadius, size/2)
  23. )
  24. path.fill()
  25. } else {
  26. context.fill(CGRect(origin: .zero, size: imageSize))
  27. }
  28. }
  29. customColorImage[color] = newImage
  30. return newImage
  31. }
  32. static let primary_3: UIImage? = {
  33. let size = CGSize(width: 10, height: 10)
  34. let renderer = UIGraphicsImageRenderer(size: size)
  35. return renderer.image { context in
  36. UIColor.primary_3.setFill()
  37. context.fill(CGRect(origin: .zero, size: size))
  38. }
  39. }()
  40. static let fill: UIImage? = {
  41. let size = CGSize(width: 10, height: 10)
  42. let renderer = UIGraphicsImageRenderer(size: size)
  43. return renderer.image { context in
  44. UIColor.fill.setFill()
  45. context.fill(CGRect(origin: .zero, size: size))
  46. }
  47. }()
  48. static let primary_6: UIImage? = {
  49. var view = UIView()
  50. view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
  51. let layer0 = CAGradientLayer()
  52. layer0.colors = [
  53. UIColor(red: 0.719, green: 0.932, blue: 1, alpha: 1).cgColor,
  54. UIColor(red: 0.865, green: 1, blue: 0.719, alpha: 1).cgColor,
  55. UIColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
  56. ]
  57. layer0.locations = [0, 0.36, 1]
  58. layer0.startPoint = CGPoint(x: 0.25, y: 0.5)
  59. layer0.endPoint = CGPoint(x: 0.75, y: 0.5)
  60. layer0.transform = CATransform3DMakeAffineTransform(CGAffineTransform(a: 0.75, b: -0.01, c: 0, d: 0.75, tx: 0, ty: 0.12))
  61. layer0.bounds = view.bounds.insetBy(dx: -0.5*view.bounds.size.width, dy: -0.5*view.bounds.size.height)
  62. layer0.position = view.center
  63. view.layer.addSublayer(layer0)
  64. let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
  65. return renderer.image { _ in
  66. view.layer.render(in: UIGraphicsGetCurrentContext()!)
  67. }
  68. }()
  69. static let primary_7: UIImage? = {
  70. var view = UIView()
  71. view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
  72. let layer0 = CAGradientLayer()
  73. layer0.colors = [
  74. UIColor(hex: "#4ED2FF").cgColor,
  75. UIColor(hex: "#95E789").cgColor
  76. ]
  77. layer0.locations = [0, 1]
  78. layer0.startPoint = CGPoint(x: 0.25, y: 0.5)
  79. layer0.endPoint = CGPoint(x: 0.75, y: 0.5)
  80. layer0.transform = CATransform3DMakeAffineTransform(CGAffineTransform(a: 1.37, b: 0, c: 0, d: 1.37, tx: 0, ty: -0.19))
  81. layer0.bounds = view.bounds
  82. layer0.position = view.center
  83. view.layer.addSublayer(layer0)
  84. let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
  85. return renderer.image { _ in
  86. view.layer.render(in: UIGraphicsGetCurrentContext()!)
  87. }
  88. }()
  89. static let primary_8: UIImage? = {
  90. var view = UIView()
  91. view.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
  92. let layer0 = CAGradientLayer()
  93. layer0.colors = [
  94. UIColor(red: 0.183, green: 0.586, blue: 1, alpha: 1).cgColor,
  95. UIColor(red: 0.313, green: 1, blue: 0.847, alpha: 1).cgColor
  96. ]
  97. layer0.locations = [0.28, 1]
  98. layer0.startPoint = CGPoint(x: 0.25, y: 0.5)
  99. layer0.endPoint = CGPoint(x: 0.75, y: 0.5)
  100. layer0.transform = CATransform3DMakeAffineTransform(CGAffineTransform(a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0.5))
  101. layer0.bounds = view.bounds.insetBy(dx: -0.5*view.bounds.size.width, dy: -0.5*view.bounds.size.height)
  102. layer0.position = view.center
  103. view.layer.addSublayer(layer0)
  104. let renderer = UIGraphicsImageRenderer(size: view.bounds.size)
  105. return renderer.image { _ in
  106. view.layer.render(in: UIGraphicsGetCurrentContext()!)
  107. }
  108. }()
  109. }