ios - 即使 focuspointofinterest 在 iPhone6 和 iPhone6+ 上发生变化,焦点也不会改变

标签 ios objective-c ios8 iphone-6 avcapturedevice

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

该函数始终返回 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/

相关文章:

ios - 调用 instanceMethodSignatureForSelector 返回 nil。为什么?

iphone - 这个对象是如何被过早释放的?

objective-c - Ruby 1.8.7 中的 Ruby 字符串编码

ios8 - presentPopoverFromRect 在 iOS8 测试版中不显示弹出框

ios - 使用照片框架将图像保存到照片库

ios - 为什么在 iOS 8 中调用 viewWillRotateToInterfaceOrientation?

ios - ARC下__weak UIViewController subview 创建简明代码

ios - Swift Parse - 本地数据存储和在 TableView 中显示对象

ios - 宏用于重复出现的字符串替换

ios - 在不同的滑动 View 之间传递 UIPageViewController 中的数据