我对信号量和块都没有太多经验。我已经看到了有关如何将异步调用转换为同步调用的各种建议。在这种情况下,我只想等确定 iPhone 的镜头已经改变焦点,然后再拍摄另一张照片。我添加了一个完成块(用一个小程序来证明我看到了它)。但是如何阻止我的其余代码(在主线程上运行),直到我得到完成回调?
- (void) changeFocusSettings
{
if ([SettingsController settings].useFocusSweep)
{
// increment the focus setting
float tmp = [SettingsController settings].fsLensPosition;
float fstmp =[[SettingsController settings] nextLensPosition: [SettingsController settings].fsLensPosition]; // get next lensposition
[SettingsController settings].fsLensPosition = fstmp ;
tmp = [SettingsController settings].fsLensPosition;
if ([self.captureDevice lockForConfiguration: nil] == YES)
{
__weak typeof(self) weakSelf = self;
[self.captureDevice setFocusModeLockedWithLensPosition:tmp
completionHandler:^(CMTime syncTime) {
NSLog(@"focus over..time = %f", CMTimeGetSeconds(syncTime));
[weakSelf focusCompletionHandler : syncTime];
}];
}
}
}
- (bool) focusCompletionHandler : (CMTime)syncTime
{
NSLog(@"focus done, time = %f", CMTimeGetSeconds(syncTime));
return true;
}
changeFocusSettings 完全是从另一个例程调用的。我在 changeFocusSettings 中成像了某种信号量集,然后 focuscompletionHandler 将其重置。但细节超出了我的范围。
谢谢你。