2013-03-19 5 views
0

Я читаю видеофайл и обрабатываю его. Код для него основан на коде в this вопрос.Обновление пользовательского интерфейса при чтении видеофайла

AVURLAsset * asset = [AVURLAsset URLAssetWithURL:url options:nil]; 
[asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler: 
^{ 
    dispatch_async(dispatch_get_main_queue(), 
        ^{ 
         AVAssetTrack * videoTrack = nil; 
         NSArray * tracks = [asset tracksWithMediaType:AVMediaTypeVideo]; 
         if ([tracks count] == 1) 
         { 
          //some code here 

          [movieReader startReading]; 

          while ([movieReader status] == AVAssetReaderStatusReading) 
          { 
          // reading the video code here 
          } 
         } 
         }); 
    }); 

Мне нужно обновить интерфейс при обработке каждого кадра, указывающего ход обработки кадров. Я вставляю кнопку в пользовательский интерфейс внутри цикла while, однако пользовательский интерфейс обновляется только после завершения всей обработки видео. Infact, любое обновление пользовательского интерфейса, выполняемое в блоке обработчика завершения, происходит только после всей обработки. Любые предложения о том, как это сделать?

ответ

1

Ваша основная нить блокируется этой цепью while. Что вам нужно сделать, это запланировать повторяющийся NSTimer (скажем, каждые 1/60 секунды) в цикле запуска основного потока, метод действия которого вызывает [movieReader status] и обновляет ход выполнения.

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