-1

我遇到了一个问题,我在 main 上运行的进度条动画被对我的串行队列的同步调用打断了。

以前我没有将此队列用作串行队列,而仅用作异步队列 - 但是这会导致在处理进入后台/前台转换时出现问题,我不得不将队列视为同步并仅调用同步而不是异步.

现在,队列保持我的应用程序完美运行——除了 UIView 动画现在卡顿(有时超过一秒钟),这取决于对我的串行队列的每个同步调用的负载。

无论如何,是否允许同步调用我的串行队列而不会在我的 UIView 动画中导致这些口吃?我已经尝试将每个同步块中的新动画动态调用到我的串行队列中,但这并不能解决问题。

4

1 回答 1

0

请尝试以下操作:

  1. 创建 NSOperationQueue。设置最大并发任务1。它将执行串行队列模式
  2. 创建 NSOperation 子类(假设 CustomOperation)并在 main 方法中编写所需的代码。一旦所需的工作完成触发完成并切换到主线程并执行进度条更新事物或其他
  3. 创建 CustomOperation 的对象并将它们全部添加到第 1 步队列

类CustomOperation:操作{

var identifier:String?
var index:Int?

override func main() {
    /// do sync or async tasks

    //// post completion tasks

    NotificationCenter.default.post(name: NSNotification.Name("TASKDONE"), object: self)
}

}

函数添加操作(){

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.trackOperation(operation:)), name: NSNotification.Name(rawValue: "TASKDONE"), object: nil)

let operationQueue = OperationQueue()
var items = [CustomOperation]()
for index in 0..<10 {
    let operation = CustomOperation()
    operation.index = index
    operation.name = "Operation:\(index)"
    items.append(operation)
}
operationQueue.maxConcurrentOperationCount = 1
operationQueue.addOperations(items, waitUntilFinished: false)

}

于 2017-12-11T18:16:23.157 回答