我正在尝试通过改变所提到的兴趣点来改变焦点。
该函数始终返回 YES,当我使用 getter 读取新的关注焦点时,它已更改但 isFocusAdjusting = NO
仅供引用:
focusMode: AVCaptureFocusModeContinuousAutoFocus
newFocusPointOfInterest: Normalized CGPoint
焦点似乎锁定在(0.5f,0.5f)或基本上是自动对焦
此代码适用于除 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 同一设备 我已尝试删除示例工作区中与手动控制相关的代码,但没有产生任何结果。
Key Value 观察表明 lensPosition 或 focusAdjusting 属性没有变化
我只找到一篇关于此问题的论坛帖子,但建议的解决方法似乎都不起作用 https://devforums.apple.com/message/1073042#1073042
我已尝试将焦点设置为自定义值、极端值,然后将模式设置为具有所需 focusPointOfInterest 的 ContinousAuto。这会触发焦点变化但不会聚焦在所需的兴趣点上
最佳答案
这与其说是一种解决方法,不如说是一种解决方法。
观察发现,在AVCaptureFocusModeAutoFocus模式下,焦点触发扫描并聚焦到需要的兴趣点上,然后锁定焦点(AVCaptureFocusModeLocked)。
如果将模式更改为 AVCaptureFocusModeContinuousAutoFocus,而不更改兴趣点,相机将执行全帧对焦,因此兴趣点变得无用。 (测试确定)
为了模仿连续自动对焦行为,我使用 AVCaptureDeviceSubjectAreaDidChangeNotification 通过将对焦模式更改为 AVCaptureFocusModeAutoFocus 来手动监控它。
但是,这不如 AVCaptureFocusModeContinuousAutoFocus 快,我观察到连续通知之间的时间间隔约为 2-3 秒。
如果有人找到更好的解决方案,请在这里分享。
注意:Apple 的默认相机也有类似的行为。不同之处在于,在 iPhone 的默认相机应用程序中移动相机时,将焦点设置为 AVCaptureFocusModeContinuousAutoFocus,并将 (0.5, 0.5) 作为感兴趣的焦点。
关于ios - 即使 focuspointofinterest 在 iPhone6 和 iPhone6+ 上发生变化,焦点也不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27099570/