我已经实现了AVCaptureSession的概念来录制视频。
-(void)startRecordingWithOrientation:(AVCaptureVideoOrientation)videoOrientation
{
AVCaptureConnection *videoConnection = [AVCamUtilities
connectionWithMediaType:AVMediaTypeVideo
fromConnections:[[self movieFileOutput] connections]];
if ([videoConnection isVideoOrientationSupported])
[videoConnection setVideoOrientation:videoOrientation];
[[self movieFileOutput] startRecordingToOutputFileURL:[self outputFileURL]
recordingDelegate:self];
}
正在录制视频,但屏幕上没有录制计时器。任何人都知道如何在制作视频时显示计时器。
提前致谢。
答案 0 :(得分:8)
我使用UILabel添加一个UILabel到视频,在录制的同时显示视频,我使用此代码显示录制时间
@property (weak, nonatomic) IBOutlet UILabel *labelTime;
@property(nonatomic, strong) NSTimer *timer;
@property(nonatomic) int timeSec;
@property(nonatomic) int timeMin;
//开始录制的方法
- (void)startRecord {
self.timeMin = 0;
self.timeSec = 0;
//String format 00:00
NSString* timeNow = [NSString stringWithFormat:@"%02d:%02d", self.timeMin, self.timeSec];
//Display on your label
//[timeLabel setStringValue:timeNow];
self.labelTime.text= timeNow;
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
//Start recording
[movieFileOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self];
}
//Event called every time the NSTimer ticks.
- (void)timerTick:(NSTimer *)timer {
self.timeSec++;
if (self.timeSec == 60)
{
self.timeSec = 0;
self.timeMin++;
}
//String format 00:00
NSString* timeNow = [NSString stringWithFormat:@"%02d:%02d", self.timeMin, self.timeSec];
//Display on your label
self.labelTime.text= timeNow;
}
答案 1 :(得分:3)
@Fran Martin接受的答案很棒!
由于我在 Swift 中使用它,我花了大约一个小时来找出正确的Timer()
函数。为了帮助下一个不熟悉Objective C的人,这是接受答案的 Swift 版本,并带有一些额外的函数invalidate
计时器,将计时器重置回{{1何时在00:00
中使用它,何时在viewWillAppear
中使用
您应invalidate
或invalidate
viewWillDisappear
计时器
我遇到了一个无法预料的问题,即使我停止运行计时器仍在运行,我发现这个SO Answer表示你必须在再次启动之前停止它并且当你宣布计时器使用时{{1} }
viewDidDisappear
答案 2 :(得分:0)
记住开始录制时的时间(NSTimeInterval),将其保存在实例变量中,然后计算每秒触发两次左右的计时器中当前时间(NSDate timeIntervalSinceReferenceDate)的差异,并显示结果时间。一个UITextView?
为避免漂移,请在每次显示后在计时器上设置“开火时间”,并将其设置为下一整秒(或半秒或常常)离开的时间。这样,如果是显示时间需要0.1秒,下一次开火时间更可能是一整秒左右。