【问题标题】:Updating UI while reading a video file读取视频文件时更新 UI
【发布时间】:2013-03-19 07:03:39
【问题描述】:

我正在读取一个视频文件并对其进行处理。它的代码基于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
                            }
                         }
                      });
   });

我需要在处理每个帧时更新 UI,以指示处理帧的进度。我在 while 循环内的 UI 上插入了一个按钮,但是,只有在整个视频处理完成后,UI 才会更新。事实上,在完成处理程序块中执行的任何 UI 更新都只会在整个处理之后发生。有什么建议吗?

【问题讨论】:

    标签: iphone ios objective-c ios5 ios4


    【解决方案1】:

    您的主线程被 while 循环阻塞。你需要做的是在主线程的运行循环上安排一个重复的NSTimer(例如,每1/60秒),其动作方法调用[movieReader status]并更新进度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多