Xcode是否有内置的方式将加载动画添加到UIImageview? UIRefreshControl已经具有旋转动画。加载图像时可以使用该动画作为占位符吗?
尽管为此内置了no特定的库,但仍有许多第三方可以解决这个问题。
您可以使用uiactivityindicatorview
并创建自定义视图,也可以使用Skeleton View之类的库,该库在图像加载时会添加占位符动画。另外,请检查这些other placeholder libraries。
希望这能回答您的问题。
我认为您可以使用UIActivityIndicatorView来显示图像的加载动画。
let spinner = UIActivityIndicatorView(style: .gray)
spinner.hidesWhenStopped = true
您可以简单地致电
spinner.startAnimating()
是,您可以使用活动指示器来指示用户正在加载图像。
UIImageView
上没有内置的加载动画。您可以如下扩展UIImageView
以添加UIActivityIndicatorView
,
extension UIImageView {
//// Returns activity indicator view centrally alligned 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
DispatchQueue.main.async {
activityIndicator.stopAnimating()
}
if let error = error {
print(error.localizedDescription)
} else {
if let _ = response as? HTTPURLResponse, let imageData = data {
DispatchQueue.main.async {[weak self] in
var image = UIImage(data: imageData)
self?.image = nil
self?.image = image
image = nil
activityIndicator.removeFromSuperview()
completion?()
}
}
}
session.finishTasksAndInvalidate()
}
downloadImageTask.resume()
}
}