2015-06-10 2 views
0

Я сохраняю массив записей в облачном наборе с CKOperation следующим образом: & отображение прогресса с просмотром прогресса.Скрыть UIProgressView, когда анимация завершена

let saveOperation = CKModifyRecordsOperation(recordsToSave: ckRecord, recordIDsToDelete: nil) 

    saveOperation.perRecordProgressBlock = { 
     record, progress in 
     if progress >= 1 { 
      self.completedRecord.addObject(record) 
      let totalSavedRecord = Double(self.completedRecord.count) 
      let totalProgress = totalSavedRecord/self.totalStudent 
      let percentageProgress = Float(totalProgress * 100) 
      progressView.setProgress(percentageProgress, animated: true) 

      println(progress) 
      println(progressView.progress) 
      println(percentageProgress) 

     } 
    } 

Я хочу, чтобы скрыть вид прогресса, когда она достигает 100% & анимация завершена.

В настоящее время я достигаю процентаПрогресс до 100.0 быстро, но прогресс просмотра анимации происходит с некоторой задержкой. Если я скрою, когда percentProgress достигнет 100.0, то я никогда не увижу анимацию.

Величина прогресса 1.0.

Значение progressView.progress также равно 1.0.

Снова я хочу показать полную анимацию от 0% до 100% &, а затем скрыть представление прогресса.

ответ

0

Блоки обратного вызова CloudKit выполняются на фоне потока. Когда вы обновляете свой пользовательский интерфейс, вы должны сделать это в основном потоке. В противном случае вы могли бы видеть странные задержки, подобные этому. Попробуйте обернуть свой код в таком блоке:

NSOperationQueue.mainQueue().addOperationWithBlock { 
    progressView.setProgress(percentageProgress, animated: true) 
} 
+1

Спасибо за помощь. Он отлично работал. –

0

Это сработало для меня. Вам просто нужно вызвать эту функцию всякий раз, когда будет выполнена ваша обработка.

func resetProgressView() { 
    let TIME_DELAY_BEFORE_HIDING_PROGRESS_VIEW: UInt32 = 2 
    // Wait for couple of seconds so that user can see that the progress view has finished and then hide. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { 
     sleep(TIME_DELAY_BEFORE_HIDING_PROGRESS_VIEW) 
     dispatch_async(dispatch_get_main_queue(), { 
     self.progressView.setProgress(0, animated: false)  // set the progress view to 0 
     }) 
    }) 
} 
+0

Его бит слишком сложный и другое решение было проще. Но спасибо за ответ. –

+0

Это на самом деле не сложнее, потому что он делает то же самое, что и код, который вы выбрали. Единственное различие заключается в том, что то, что я предложил, использует новый способ обработки очередей с потоками. И более удобен для пользователя, если обработка происходит очень быстро, и индикатор прогресса не будет стрелять, как молния, без того, чтобы пользователь понял, что это за пункт. – Daniel

Смежные вопросы