100 lines
2.7 KiB
Swift
100 lines
2.7 KiB
Swift
//
|
|
// NRImageView.swift
|
|
// ReaderHive
|
|
//
|
|
// Created by 澜声世纪 on 2025/11/21.
|
|
//
|
|
|
|
import UIKit
|
|
import Kingfisher
|
|
|
|
class NRImageView: UIImageView {
|
|
|
|
var placeholderColor = UIColor.E_0_E_0_E_0
|
|
var placeholderImage = UIImage(named: "placeholder_image")
|
|
|
|
private lazy var placeholderImageView: UIImageView = {
|
|
let imageView = UIImageView(image: placeholderImage)
|
|
imageView.isHidden = true
|
|
imageView.contentMode = .scaleAspectFit
|
|
return imageView
|
|
}()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
_init()
|
|
}
|
|
|
|
override init(image: UIImage?) {
|
|
super.init(image: image)
|
|
_init()
|
|
}
|
|
|
|
override init(image: UIImage?, highlightedImage: UIImage?) {
|
|
super.init(image: image, highlightedImage: highlightedImage)
|
|
_init()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
super.init(coder: coder)
|
|
_init()
|
|
}
|
|
|
|
override func awakeFromNib() {
|
|
super.awakeFromNib()
|
|
_init()
|
|
}
|
|
|
|
func _init() {
|
|
self.contentMode = .scaleAspectFill
|
|
self.layer.masksToBounds = true
|
|
if image == nil {
|
|
self.backgroundColor = self.placeholderColor
|
|
placeholderImageView.isHidden = false
|
|
}
|
|
addSubview(placeholderImageView)
|
|
}
|
|
|
|
override var image: UIImage? {
|
|
didSet {
|
|
if self.backgroundColor == nil && image == nil {
|
|
self.backgroundColor = self.placeholderColor
|
|
} else if image != nil {
|
|
if self.backgroundColor == self.placeholderColor {
|
|
self.backgroundColor = nil
|
|
}
|
|
}
|
|
|
|
if image == nil {
|
|
placeholderImageView.isHidden = false
|
|
} else {
|
|
placeholderImageView.isHidden = true
|
|
}
|
|
}
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
super.layoutSubviews()
|
|
|
|
placeholderImageView.frame = .init(x: 0, y: 0, width: self.bounds.width * (1 / 3), height: self.bounds.height * (1 / 3))
|
|
placeholderImageView.center = .init(x: self.bounds.width / 2, y: self.bounds.height / 2)
|
|
}
|
|
|
|
|
|
}
|
|
|
|
extension UIImageView {
|
|
func nr_setImage(_ url: String?, placeholder: UIImage? = nil, completer: ((_ image: UIImage?, _ url: URL?) -> Void)? = nil) {
|
|
|
|
self.kf.setImage(with: URL(string: url ?? ""), placeholder: placeholder, options: nil) { result in
|
|
switch result {
|
|
case .success(let value):
|
|
completer?(value.image, value.source.url)
|
|
default :
|
|
completer?(nil, nil)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|