我观看了有关辅助功能的 WWDC session ,并按照 Apple 的建议进行操作:
// Convert frame to window coordinates
frame = [view convertRect:frame toView:[appDelegate window]];
// Convert frame to "screen" coordinates
frame = [w convertRect:frame toWindow:nil];
DLog(@"accessibilityFrame = %@", NSStringFromCGRect(frame));
// Set accessibility frame
element.accessibilityFrame = frame;
我的辅助功能容器对象是在 View Controller 的 -viewDidLoad 中创建的。 然后,它会为 map 图像上的项目创建 UIAccessibilityElement 对象。
问题:
当我在延迟一段时间后调用代码时,一切正常。正确的 accessibilityFrame 看起来像这样:
{{0, 184}, {44, 200}}
当我在辅助功能容器 View 的 -initWithFrame: 中调用上述代码时,-convertRect:toWindow: 将所有值除以 2。框架变得更小且错误。错误的 accessibilityFrame 看起来像这样:
{{0, 220}, {22, 100}}
似乎 -convertRect:toWindow: 方法有一个错误,当在 -applicationDidFinishLaunching 之后调用得太快时,它会导致它无法正常工作...是否有解决方法可以安全地将其转换为正确的屏幕坐标?
最佳答案
您是否尝试过使用 UIAccessibilityConvertFrameToScreenCoordinates
?
这是一个接受 CGRect
和 UIView
的函数,并将 rect 转换为 UIView 的
> 坐标空间。 UIScreen
坐标
关于iphone - 如何正确设置 UIAccessibilityElement 的 accessibilityFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912286/