2013-03-19 44 views
0

我在閱讀視頻文件並對其進行處理。它的代碼是基於this問題中的代碼。在閱讀視頻文件時更新UI

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循環中的UI上插入一個按鈕,但是,只有在整個視頻處理完成後纔會更新UI。事實上,在完成處理程序塊中執行的任何UI更新只發生在整個處理之後。有關如何做的建議?

回答

1

您的主線程正在被該while循環阻止。您需要做的是在主線程的運行循環中安排定期執行NSTimer(例如,每1/60秒),該主線程的操作方法調用[movieReader status]並更新進度。