使用 VoiceOver 在 iOS 14 上禁用 UIImageView 的图像识别
Disable image recognition for UIImageView on iOS 14 with VoiceOver
我有一个 UIImageView 作为视图的背景。用户交互被禁用。 isAccessibilityElement 设置为 NO。当应用程序在设备上 运行 时,通过使用调试视图层次结构验证这一点。
然而,当我点击具有该背景的视图时,会描述其上的所有控件,然后使用自动图像识别来描述图像。我在网上找到的所有内容都说这是一个新的 iOS 14 功能,它很棒,但没有说明如何关闭它。
我什至尝试设置自己的描述字符串以至少尝试覆盖图像识别但无济于事。那么 - 有没有办法为特定的 UIImageView(甚至整个应用程序)关闭它,如果是的话如何?
*** 更新 ****
所以我已经确认这是特定于 iOS 14。我在 viewDidLoad
中有以下代码:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"blueSky.jpg"]];
imageView.isAccessibilityElement = YES;
imageView.accessibilityLabel = @"I am not a description";
CGPoint origin = imageView.frame.origin;
origin.y = 50;
origin.x = 50;
CGRect imageFrame = imageView.frame;
imageFrame.origin = origin;
imageView.frame = imageFrame;
self.view.isAccessibilityElement = NO;
[self.view addSubview:imageView];
blueSky 是蓝天的图像。它没有使用资产目录。当我在 iOS 13 中启用 VoiceOver 的情况下点击图像时,它会显示“我不是描述”。当我在 iOS 14.1 设备上点击它时,它显示“我不是描述”,然后停顿半秒钟,说“图像”,然后继续描述它“蓝天,多云”。这是我这辈子都想不出如何消除的最后一部分!
所以我找到了答案:
imageView.accessibilityTraits = UIAccessibilityTraitNone;
这告诉系统不要将其视为图像,因此不会尝试识别它。
我有一个 UIImageView 作为视图的背景。用户交互被禁用。 isAccessibilityElement 设置为 NO。当应用程序在设备上 运行 时,通过使用调试视图层次结构验证这一点。
然而,当我点击具有该背景的视图时,会描述其上的所有控件,然后使用自动图像识别来描述图像。我在网上找到的所有内容都说这是一个新的 iOS 14 功能,它很棒,但没有说明如何关闭它。
我什至尝试设置自己的描述字符串以至少尝试覆盖图像识别但无济于事。那么 - 有没有办法为特定的 UIImageView(甚至整个应用程序)关闭它,如果是的话如何?
*** 更新 ****
所以我已经确认这是特定于 iOS 14。我在 viewDidLoad
中有以下代码:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"blueSky.jpg"]];
imageView.isAccessibilityElement = YES;
imageView.accessibilityLabel = @"I am not a description";
CGPoint origin = imageView.frame.origin;
origin.y = 50;
origin.x = 50;
CGRect imageFrame = imageView.frame;
imageFrame.origin = origin;
imageView.frame = imageFrame;
self.view.isAccessibilityElement = NO;
[self.view addSubview:imageView];
blueSky 是蓝天的图像。它没有使用资产目录。当我在 iOS 13 中启用 VoiceOver 的情况下点击图像时,它会显示“我不是描述”。当我在 iOS 14.1 设备上点击它时,它显示“我不是描述”,然后停顿半秒钟,说“图像”,然后继续描述它“蓝天,多云”。这是我这辈子都想不出如何消除的最后一部分!
所以我找到了答案:
imageView.accessibilityTraits = UIAccessibilityTraitNone;
这告诉系统不要将其视为图像,因此不会尝试识别它。