这里是我如何能够增加一个UIProgressView
recording
是由AVCaptureMovieFileOutput
我AVCaptureMovieFileOutput
类型的变量movieFileOutput,我使用将数据捕获到一个扩展的AVCaptureFileOutput
属性QuickTime电影。
@property (nonatomic) AVCaptureMovieFileOutput *movieFileOutput;
我在记录属性中添加了一个观察者来检测记录的变化。
[self addObserver:self
forKeyPath:@"movieFileOutput.recording"
options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew)
context:RecordingContext];
然后在回调方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
我创建了一个while循环在后台执行,那么我确信派遣更新视图像这样在主线程:
dispatch_async([self sessionQueue], ^{ // Background task started
// While the movie is recording, update the progress bar
while ([[self movieFileOutput] isRecording]) {
double duration = CMTimeGetSeconds([[self movieFileOutput] recordedDuration]);
double time = CMTimeGetSeconds([[self movieFileOutput] maxRecordedDuration]);
CGFloat progress = (CGFloat) (duration/time);
dispatch_async(dispatch_get_main_queue(), ^{ // Here I dispatch to main queue and update the progress view.
[self.progressView setProgress:progress animated:YES];
});
}
});
是否正在更新无限循环中的UI?这一定非常低效。 – Vojto 2017-09-28 19:58:43