ios - 当 UIActivityIndi​​catorView 加载速度足够快(不到一秒)时不显示它

标签 ios swift uiactivityindicatorview

我想知道是否可以在数据加载速度足够快(例如不到一秒)时不显示 UIActivityIndi​​catorView

在我当前的应用中,我的收藏 View 会在每次新搜索时重新加载,但有时搜索速度非常快,指示器 View 会闪烁并立即消失,给应用带来丑陋的整体感觉。

所以基本上我的问题是:当我的加载足够快时,我可以“禁用”UIActivityIndi​​catorView 吗?

最佳答案

使用此类,如果回调发生时间少于 1 秒,我不会显示事件指示器。

final class DelayableActivityIndicatorView: UIActivityIndicatorView {
    static let kDefaultDelay: TimeInterval = 1
    private var inProgress = false

    func startAnimatingWithDelay(_ delay: TimeInterval = kDefaultDelay) {
        inProgress = true
        DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
            if self.inProgress == true {
                self.startAnimating()
            }
            self.inProgress = false
        }
    }

    func stopAnimatingWithDelay() {
        inProgress = false
        stopAnimating()
    }
}

在 View Controller 中使用它,

class MyViewController : UIViewController {
    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        self.view = view
    }

    var spinner: DelayableActivityIndicatorView = {
       let view = DelayableActivityIndicatorView(style: .gray)
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(spinner)
        spinner.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        spinner.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        spinner.startAnimatingWithDelay()

        // replace this code with your network api
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.spinner.stopAnimatingWithDelay()
        }
    }
}

关于ios - 当 UIActivityIndi​​catorView 加载速度足够快(不到一秒)时不显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37963863/

相关文章:

ios - 使用 iOS Simulator 模拟 iPad 1

android - 更新到 v0.5.1 后不存在 Flutter 导入

swift - 快速计算的属性 getter 可以改变结构吗?

ios - UIActivityViewController Gmail 共享主题和正文变空了吗?

swift - 事件指示器未显示在 View Controller 上

ios - 这个 iOS 错误是什么?它来自哪里?

ios - 流音频无法与 Avplayer 一起使用

ios - 超过最大文本 ("") 连接长度 - SwiftUI -

Swift - 如何在连续点击 3 次后禁用按钮?

ios - 全局加载图标 Swift