gpt4 book ai didi

objective-c - 使用 AvFoundation 录制视频时,objective c 循环会阻止用户输入吗?

转载 作者:行者123 更新时间:2023-11-28 22:51:09 24 4
gpt4 key购买 nike

你好,每次我尝试使用 CFAbsoluteTimeGetCurrent() 记录日期;我的应用程序忽略了其余按钮,就好像它接管了所有内存并阻止了所有用户输入。我想知道我做错了什么?我想制作一个函数 showtime() 但我不知道如何在函数之间传递值从 toggleRecording 到 showtime 以便我的方法可以工作,如果这甚至可以解决问题。下面是我的代码:

- (IBAction)toggleRecording:(id)sender
{
// Start recording if there isn't a recording running. Stop recording if there is.
[[self recordButton] setEnabled:NO];
if (![[[self captureManager] recorder] isRecording]){
[[self captureManager] startRecording];

/* figure out a day to record for every half a second
while([[[self captureManager]recorder] isRecording]){
CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();
NSLog(@" time is %i", startTime);
}

*/
}
else
[[self captureManager] stopRecording];


}

-(void)showtime:(id)sender{
while([[[self captureManager]recorder] isRecording]){
CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();
NSLog(@" time is %f", startTime);
}
}

最佳答案

应用程序必须运行事件循环来接收事件。当您自己的代码正在做其他事情时(这里它在做一个“while”循环),事件会排队并且在您的代码返回之前不会被传递。

从原理上讲,应用程序正在做类似的事情:

while(1) {
event = _UIReceiveNextQueuedEvent();
_UIProcessEvent(event); // <- this calls -showTime:
}

如果你想在不阻塞循环的情况下记录时间,你必须每 0.5 秒安排一个 NSTimer 并在记录关闭后立即使其失效。

类似于:

- (void)showTime:(id)sender
{
if ([[[self captureManager]recorder] isRecording]) {
[NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
}
}

- (void)timerFired:(NSTimer *)timer
{
if ([[[self captureManager]recorder] isRecording]) {
CFTimeInterval startTime = CFAbsoluteTimeGetCurrent();
NSLog(@" time is %f", startTime);
} else {
[timer invalidate];
}
}

关于objective-c - 使用 AvFoundation 录制视频时,objective c 循环会阻止用户输入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com