IOS辅助功能选择的标记不移动

Posted

技术标签:

【中文标题】IOS辅助功能选择的标记不移动【英文标题】:IOS Accessibility selected marker not moving 【发布时间】:2019-02-05 11:50:17 【问题描述】:

我们设置了不可见的 UIView,并将其标记为可用于 ios 画外音。滑动将轮廓标记从一个视图移动到另一个视图,但如果我们使用 SetFrame 移动视图的位置,并且它是当前为 Voiceover 选择的视图,它不会随之移动框架。如果我们然后触摸或拖动到同一个视图上,它就会选择新的位置。

任何想法如何以编程方式移动大纲?

这是我们的粗略代码

我们在屏幕上维护一系列区域和文本,这些区域和文本需要成为可访问视图,并在这些区域上创建和更新不可见视图。

// 如果我们检测到需要新视图

LocalAccBounds[i].view= [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)] retain];
LocalAccBounds[i].view.backgroundColor=[UIColor clearColor];
LocalAccBounds[i].view.isAccessibilityElement = true;
LocalAccBounds[i].view.userInteractionEnabled = false;      
LocalAccBounds[i].view.accessibilityLabel = [NSString stringWithCString:LocalAccBounds[i].txt encoding:NSUTF8StringEncoding];
UIViewController * lVC = [[[UIApplication sharedApplication] keyWindow] rootViewController];
[lVC.view addSubview:LocalAccBounds[i].view];

// 如果我们检测到现有视图已移动

[LocalAccBounds[i].view setFrame:CGRectMake(LocalAccBounds[i].x1*xsc,LocalAccBounds[i].y1*ysc, LocalAccBounds[i].x2*xsc-LocalAccBounds[i].x1*xsc, LocalAccBounds[i].y2*ysc-LocalAccBounds[i].y1*ysc-0)];

// 如果我们检测到不再需要现有视图

[LocalAccBounds[i].view removeFromSuperview];
[LocalAccBounds[i].view release];
LocalAccBounds[i].view=0;

当我们移动现有视图时,例如我们向左或向右滚动它们,它不会随视图移动轮廓。有时大约一秒钟后,轮廓标记会移动到一个或其他现有轮廓,但不一定是最后一次触摸的位置。

谢谢

肖恩

【问题讨论】:

【参考方案1】:

我不太了解您的用例,但根据您帖子中写的内容,我建议:

使用accessibilityFrameInContainerSpace 属性创建可访问性视图。 查看UIAccessibilityFocus 非正式协议,了解可访问的元素焦点。

根据我对您的问题的模糊理解,这两条线索应该可以帮助您达到目的。

【讨论】:

以上是关于IOS辅助功能选择的标记不移动的主要内容,如果未能解决你的问题,请参考以下文章

ios辅助功能之voiceover实战

iOS 辅助功能 - 如何本地化 VoiceOver 语言

「冰狐智能辅助」如何实现在线实时调试?

ios中等效的辅助功能角色imagebutton

iOS 13 语音控制辅助功能 - 有没有办法执行更多自定义操作(而不仅仅是链接到辅助功能标签)?

由于辅助功能设置未检测到 iOS 手势