Ios “背后的观点”;通过;UIView不是';无障碍
我有一个例子,一个透明的Ios “背后的观点”;通过;UIView不是';无障碍,ios,uikit,accessibility,voiceover,uiaccessibility,Ios,Uikit,Accessibility,Voiceover,Uiaccessibility,我有一个例子,一个透明的UIViewController显示在地图视图上。 ViewController.view是透明的,并且是“直通”视图。这意味着ViewController的所有触摸都会传递到VC后面的地图视图 “通过”行为由 override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { for subview in subviews { if !subview.isHi
UIViewController
显示在地图视图上。
ViewController.view是透明的,并且是“直通”视图。这意味着ViewController的所有触摸都会传递到VC后面的地图视图
“通过”行为由
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
for subview in subviews {
if !subview.isHidden && subview.alpha > 0 && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {
return true
}
}
return false
}
所有的触摸和手势都很完美,但我发现画外音根本不起作用。无法访问地图视图。我无法选择任何带有VO的mapView元素。
我做了一些研究,发现VO使用了一种私有方法:
[UIViewAccessibility(SafeCategory) _accessibilityHitTest:withEvent:]
看起来这个方法没有使用重写的pointInside方法。那么有人知道如何以安全的方式修复它吗?您可以通过设置
view.isAccessibilityElement=NO使VoiceOver忽略视图代码>
或者,您可以使视图
符合UIAccessibilityContainer
协议。如果由于某种原因无法工作,您可以设置view.accessibilityElements=@[mapView,…]代码>view.accessibilityElements=@[mapView,…]代码>工作。解决方案很简单!如果使用谷歌地图(GMSMapView),您需要通过GMSMapView和每个GMSMarker。