iphone - 如何正确设置 UIAccessibilityElement 的 accessibilityFrame?

标签 iphone ios objective-c ipad uikit

我观看了有关辅助功能的 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? 这是一个接受 CGRectUIView 的函数,并将 rect 转换为 UIView 的 UIScreen 坐标 > 坐标空间。

关于iphone - 如何正确设置 UIAccessibilityElement 的 accessibilityFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17912286/

相关文章:

iphone - iphone模拟器是否能够显示航向和纬度,经度?

iphone - 保持UISegmentedControl(以及其他)的响应

iphone/ipad - 使用 Autoresize 和 addSubview 时出现问题

ios - 当应用程序使用 Facebook 登录时,SVProgressHud 未在 iOS 9 中显示

iphone - 是否有一种全局方法可以将 iPhone 和 iPad 应用程序合并为通用应用程序?

ios - 链接器命令失败(Apple Mach-O)

ios - 制作Yajl iOS框架文件

iphone - NSManagedObject 没有被持久化 - 无论我多么努力地尝试 :(

iphone - 创建 NSObject 的副本

objective-c - Runloop 和线程的区别?