串行队列同步方法在Main上中断UIView动画

时间:2017-12-11 16:49:29

标签: ios swift main uiviewanimation dispatch-queue

我遇到一个问题,我在主节点上运行的进度条动画因同步调用我的串行队列而中断。

以前我没有将此队列用作串行队列,而只是作为异步队列使用 - 但这会在处理输入后台/前台转换时导致问题,我不得不将队列视为同步并且只调用同步而不是异步就可以了。

现在,流程明智的队列使我的应用程序完美运行 - 除了UIView动画现在断断续续(有时超过一秒钟),具体取决于每个同步调用到我的串行队列的负载。

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

1 个答案:

答案 0 :(得分:0)

请尝试以下事项:

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

    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)
    }
    

    }

    func addOperations(){

    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)
    

    }