iphone - 读取视频文件时更新 UI

标签 iphone ios objective-c ios5 ios4

我正在读取视频文件并对其进行处理。它的代码基于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 才会更新。事实上,在完成处理程序 block 中执行的任何 UI 更新仅在整个处理之后才会发生。关于如何做到这一点有什么建议吗?

最佳答案

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

关于iphone - 读取视频文件时更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15493405/

相关文章:

iphone - 如何在 iPhone 上读取 RGB 像素数据

iphone - 横向主页按钮问题

iphone - UIWebView 离线渲染数据

ios - 不考虑时间比较 NSDates

objective-c - 如何追踪内存峰值? (这是带有 p 的峰,而不是 l。)

ios - 连接表单文本字段的下一个字段链

iphone - 如何在将捕获的图像保存到 IOS 的画廊之前裁剪它

ios - 无法构建 Cordova ios。错误65

ios - 将xcode项目转换为静态库

iOS:在 UITableViewCintroller 子类中创建默认静态表