如何在UI工作中间显示微调器?

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

我在iOS上具有以下功能,可在TableView上执行UI工作,而挑战在于,如果开始花费更长的时间,则需要0.5秒。应向用户显示一个微调框,以使屏幕看起来不会冻结。

func updateForm(with rowItems: [RowItem]) {

    self.tableView.beginUpdates()   // performance tweak.

    let viewControllerName = String.init(describing: self.classForCoder)    // id
    var defaultSection = Form.createSectionWith(tag: viewControllerName, in: form)

    // MARK: - update rows

    let allRows = self.form.allRows

    let startTime = CFAbsoluteTimeGetCurrent()
    var showSpinner = false

    for (index, item) in rowItems.enumerated() {
        .
        .
        .
        <TableView processing work on 100's of rows>
        .
        .
        .

        // Evaluate our running time for this process loop, and display spinner if we're past a threshold of seconds.
        let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
        if timeElapsed > 0.5 && showSpinner == false {
            showSpinner = true
            self.showActivityIndicator(withStatus: "processing")    // {NEVER GETS DISPLAYED}
        }

    }  // for (index, item) ...

当然,当我打电话给showActivityIndicator时,它实际上并没有显示。

我如何中断和暂停UI工作以显示showActivityIndicator微调器动画,然后让循环继续?

ios swift uitableview asynchronous spinner
1个回答
0
投票

您需要离开主线程,以便允许运行循环循环并发生重绘时刻。在显示微调框之后再进行简单的延迟即可解决问题。但是您将必须重新组织代码以实现此目的。最简单的解决方案是放弃您的0.5秒创意,仅在开始之前显示微调框。

© www.soinside.com 2019 - 2024. All rights reserved.