即使仅在iPhone6和iPhone6 +上改变了焦点,焦点也不会改变

时间:2014-11-24 07:10:38

标签: ios objective-c ios8 iphone-6 avcapturedevice

我正试图通过改变所提到的兴趣点来改变焦点。

该函数始终返回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。这会触发焦点变化,但不会集中在所需的兴趣点

1 个答案:

答案 0 :(得分:1)

这不是一个答案,因为它是一种解决方法。

从观察开始,当处于AVCaptureFocusModeAutoFocus模式时,焦点会触发扫描并关注所需的兴趣点,然后锁定焦点(AVCaptureFocusModeLocked)。

如果您将模式更改为AVCaptureFocusModeContinuousAutoFocus,而不更改关注点,则相机将执行全帧焦点,因此无法使用pointofinterest。 (根据测试确定)

为了模仿连续的自动对焦行为,我使用AVCaptureDeviceSubjectAreaDidChangeNotification通过将焦点模式更改为AVCaptureFocusModeAutoFocus来手动监视它。

然而,这并不像AVCaptureFocusModeContinuousAutoFocus那么快,我观察到连续通知之间的时间间隔约为2-3秒。

如果有人找到了更好的解决方案,请在此处分享。

注意:Apple的默认相机也表现得与此类似。不同之处在于,当相机在iPhone的默认相机应用程序中移动时,焦点设置为AVCaptureFocusModeContinuousAutoFocus,其中(0.5,0.5)为焦点。