XCode是否具有内置的UIImageView加载动画?

问题描述 投票:-3回答:3

Xcode是否有内置的方式将加载动画添加到UIImageview? UIRefreshControl已经具有旋转动画。加载图像时可以使用该动画作为占位符吗?

ios swift uiimageview
3个回答
1
投票

尽管为此内置了no特定的库,但仍有许多第三方可以解决这个问题。

您可以使用uiactivityindicatorview并创建自定义视图,也可以使用Skeleton View之类的库,该库在图像加载时会添加占位符动画。另外,请检查这些other placeholder libraries

希望这能回答您的问题。


1
投票

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

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

您可以简单地致电

spinner.startAnimating()

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


0
投票

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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.