Xcode 是否有用于 UIImageView 的内置加载动画?



Xcode 是否有内置的方式来向 UIImageview 添加加载动画?UIRefreshControl已经有一个旋转动画。我可以在加载图像时将该动画用作占位符吗?

UIImageView上没有内置的加载动画。您可以按如下方式扩展UIImageView以添加UIActivityIndicatorView

extension UIImageView {
//// Returns activity indicator view centrally aligned inside the UIImageView
private var activityIndicator: UIActivityIndicatorView {
let activityIndicator = UIActivityIndicatorView()
activityIndicator.hidesWhenStopped = true
activityIndicator.color = UIColor.black
self.addSubview(activityIndicator)
activityIndicator.translatesAutoresizingMaskIntoConstraints = false
let centerX = NSLayoutConstraint(item: self,
attribute: .centerX,
relatedBy: .equal,
toItem: activityIndicator,
attribute: .centerX,
multiplier: 1,
constant: 0)
let centerY = NSLayoutConstraint(item: self,
attribute: .centerY,
relatedBy: .equal,
toItem: activityIndicator,
attribute: .centerY,
multiplier: 1,
constant: 0)
self.addConstraints([centerX, centerY])
return activityIndicator
}
/// Asynchronous downloading and setting the image from the provided urlString
func setImageFrom(_ urlString: String, completion: (() -> Void)? = nil) {
guard let url = URL(string: urlString) else { return }
let session = URLSession(configuration: .default)
let activityIndicator = self.activityIndicator
DispatchQueue.main.async {
activityIndicator.startAnimating()
}
let downloadImageTask = session.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error.localizedDescription)
} else {
if let imageData = data {
DispatchQueue.main.async {[weak self] in
var image = UIImage(data: imageData)
self?.image = nil
self?.image = image
image = nil
completion?()
}
}
}
DispatchQueue.main.async {
activityIndicator.stopAnimating()
activityIndicator.removeFromSuperview()
}
session.finishTasksAndInvalidate()
}
downloadImageTask.resume()
}
}

尽管没有特定的内置库,但仍有许多第三方可以做到这一点。

您可以使用uiactivityindicatorview并创建自定义视图,也可以使用框架视图等库,该库在加载图像时添加占位符动画。另外,请查看这些其他占位符库。

希望这能回答您的问题。

我认为您可以使用UIActivityIndicatorView来显示图像的加载动画。

let spinner = UIActivityIndicatorView(style: .gray)
spinner.hidesWhenStopped = true

您可以简单地致电

spinner.startAnimating()

是的,您可以使用活动指示器来指示用户正在加载图像。

最新更新