UIImageView+Ex.swift 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // UIImageView+Ex.swift
  3. // TSLiveWallpaper
  4. //
  5. // Created by 100Years on 2024/12/20.
  6. //
  7. import Kingfisher
  8. extension UIImageView {
  9. /// 创建并配置 UIImageView
  10. /// - Parameters:
  11. /// - imageName: 图片名称
  12. /// - contentMode: 内容模式,默认为 `.scaleAspectFit`
  13. /// - backgroundColor: 背景颜色,默认为透明
  14. /// - Returns: 配置完成的 UIImageView 实例
  15. static func createImageView(imageName: String,
  16. contentMode: UIView.ContentMode = .scaleAspectFit,
  17. backgroundColor: UIColor = .clear,
  18. corner: CGFloat = 0.0) -> UIImageView {
  19. let imageView = UIImageView()
  20. imageView.image = UIImage(named: imageName)
  21. imageView.contentMode = contentMode
  22. imageView.backgroundColor = backgroundColor
  23. imageView.cornerRadius = corner
  24. return imageView
  25. }
  26. /// 异步创建并加载图片的 UIImageView
  27. /// - Parameters:
  28. /// - imageName: 本地占位图片名称
  29. /// - urlString: 图片的 URL 字符串
  30. /// - contentMode: 内容模式,默认为 `.scaleAspectFit`
  31. /// - backgroundColor: 背景颜色,默认为透明
  32. /// - showLoading: 是否显示加载动画,默认为 `true`
  33. /// - completion: 图片加载成功后的回调
  34. static func createAsyncImageView(urlString: String?,
  35. placeholder:UIImage?,
  36. contentMode: UIView.ContentMode = .scaleAspectFit,
  37. backgroundColor: UIColor = .clear,
  38. showLoading: Bool = false,
  39. completion: ((UIImage?) -> Void)? = nil) -> UIImageView {
  40. let imageView = UIImageView()
  41. imageView.setAsyncImage(urlString: urlString,
  42. placeholder:placeholder,
  43. contentMode:contentMode,
  44. backgroundColor:backgroundColor,
  45. showLoading:showLoading,
  46. completion:completion)
  47. return imageView
  48. }
  49. func setAsyncImage(urlString: String?,
  50. placeholder: UIImage? = nil,
  51. contentMode: UIView.ContentMode = .scaleAspectFill,
  52. backgroundColor: UIColor = .clear,
  53. showLoading: Bool = false,
  54. completion: ((UIImage?) -> Void)? = nil){
  55. let imageView = self
  56. imageView.contentMode = contentMode
  57. imageView.backgroundColor = backgroundColor
  58. guard let urlString = urlString, let url = URL(string: urlString) else {
  59. completion?(nil)
  60. return
  61. }
  62. if urlString.contains("http") {
  63. kf.indicatorType = showLoading ? .activity : .none
  64. imageView.kf.setImage(with: url,
  65. placeholder: placeholder,
  66. options: nil,
  67. progressBlock: nil) { result in
  68. if let image = try? result.get().image {
  69. completion?(image)
  70. }else{
  71. completion?(nil)
  72. }
  73. }
  74. }else if urlString.contains("/") {
  75. imageView.image = placeholder
  76. imageView.image = UIImage(contentsOfFile: urlString.fillCachePath)
  77. }else {
  78. imageView.image = placeholder
  79. if let image = UIImage(named: urlString) {
  80. imageView.image = image
  81. }
  82. }
  83. }
  84. }
  85. extension UIImageView {
  86. static func createRightArrow() -> UIImageView {
  87. let imageView = UIImageView()
  88. imageView.image = UIImage(named: "white_right_arrow")
  89. return imageView
  90. }
  91. }
  92. extension UIImageView {
  93. func setImage(_ image: UIImage?, duration: CFTimeInterval = 0.2, animated: Bool = true) {
  94. if let image = image {
  95. if animated {
  96. UIView.transition(
  97. with: self,
  98. duration: duration,
  99. options: [.transitionCrossDissolve, .curveEaseInOut, .allowUserInteraction]
  100. ) {
  101. self.image = image
  102. }
  103. }else {
  104. self.image = image
  105. }
  106. }
  107. }
  108. }