我正试图通过改变所提到的兴趣点来改变焦点。
该函数始终返回YES,当我使用getter读取感兴趣的新焦点时,它已更改,但isFocusAdjusting = NO
仅供参考:
focusMode: AVCaptureFocusModeContinuousAutoFocus
newFocusPointOfInterest: Normalized CGPoint
焦点似乎锁定在(0.5f,0.5f)或基本上是AutoFocus
此代码适用于除iPhone 6和iPhone 6+以外的所有设备。有什么我做错了吗?是否有任何API调用已更改?
请帮忙
- (BOOL)changeDeviceFocusPointOfInterest:(CGPoint)newFocusPointOfInterest
focusMode:(AVCaptureFocusMode)focusMode
{
NSError *error;
BOOL ret = NO;
if([device lockForConfiguration:&error] )
{
if ([device isFocusModeSupported:focusMode] && [device isFocusPointOfInterestSupported])
{
[device setFocusPointOfInterest:newFocusPointOfInterest];
[device setFocusMode:focusMode];
ret = YES;
}
else
{
NSLog(@"focus point setting not supported:{%f,%f}", newFocusPointOfInterest.x, newFocusPointOfInterest.y);
ret = NO;
}
[device unlockForConfiguration];
}
else
{
NSLog(@"cant lock hardware settings for changing focus point:{%f,%f}", newFocusPointOfInterest.x, newFocusPointOfInterest.y);
ret = NO;
}
return ret;
}
**编辑:补充意见:**
我查看过Apple AVCam和AVCamManual提供的示例应用程序 - 点按以将重点放在AVCam上,而不是AVCamManual 相同设备 我尝试在示例工作区中删除与手动控件相关的代码,但它没有产生任何结果。
关键值观察显示lensPosition或focusAdjusting属性没有变化
我发现此问题只有一篇论坛帖子,但建议的解决办法似乎没有用https://devforums.apple.com/message/1073042#1073042
我尝试将焦点设置为自定义值,极限然后将模式设置为ContinousAuto并使用所需的focusPointOfInterest。这会触发焦点变化,但不会集中在所需的兴趣点
答案 0 :(得分:1)
这不是一个答案,因为它是一种解决方法。
从观察开始,当处于AVCaptureFocusModeAutoFocus模式时,焦点会触发扫描并关注所需的兴趣点,然后锁定焦点(AVCaptureFocusModeLocked)。
如果您将模式更改为AVCaptureFocusModeContinuousAutoFocus,而不更改关注点,则相机将执行全帧焦点,因此无法使用pointofinterest。 (根据测试确定)
为了模仿连续的自动对焦行为,我使用AVCaptureDeviceSubjectAreaDidChangeNotification通过将焦点模式更改为AVCaptureFocusModeAutoFocus来手动监视它。
然而,这并不像AVCaptureFocusModeContinuousAutoFocus那么快,我观察到连续通知之间的时间间隔约为2-3秒。
如果有人找到了更好的解决方案,请在此处分享。
注意:Apple的默认相机也表现得与此类似。不同之处在于,当相机在iPhone的默认相机应用程序中移动时,焦点设置为AVCaptureFocusModeContinuousAutoFocus,其中(0.5,0.5)为焦点。