【问题标题】:Detecting with KVO when Adjusting focus is done - not correct on iPhone 6+调整焦点时使用 KVO 检测 - 在 iPhone 6+ 上不正确
【发布时间】:2016-11-06 08:41:42
【问题描述】:

我想用AVCaptureStillImageOutput拍摄静止图像,当调整焦点完成时,我正在使用键值观察来做到这一点,在iOS 10的iPhone 6+上测试时方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if( [keyPath isEqualToString:@"adjustingFocus"] )
    {
        BOOL adjustingFocus = [ [change objectForKey:NSKeyValueChangeNewKey] isEqualToNumber:[NSNumber numberWithInt:1] ];
        if (adjustingFocus)
        {
            NSLog(@"adjusting focus started");
        }
        else
        {
            NSLog(@"adjustingFocus done");
        }
    }
}

有时会被调用多次,当我第一次检测到对焦完成时,屏幕很模糊,捕获的静止图像也是如此。我注意到在这种情况下(模糊图像)该方法被调用了 2 次(在开始和结束调整焦点时)。有没有办法检测到焦点没有正确调整并等待下一次调用或只调用一次的方法?

【问题讨论】:

    标签: ios iphone key-value-observing avcapturesession


    【解决方案1】:

    我发现,就 KVO 而言,有时单个聚焦“事件”会产生一系列快速连续的开始、停止、开始、停止。为了缓解这种情况,我在听到“开始”时跟踪时间戳,如果下一个“停止”事件在某个时间阈值过去之前出现(我使用 300 毫秒),我会忽略该“停止”事件,因为我相当肯定另一个“开始”很快就会到来(我也忽略了,因为我们已经“开始”了),然后最后的“停止”将在第一次“开始”之后超过 300 毫秒,所以我认为这是那个聚焦事件的真正结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2012-10-19
      相关资源
      最近更新 更多