我观看了关于可访问性的 WWDC 会议,并按照 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;
我的可访问性容器对象是在视图控制器的 -viewDidLoad 中创建的。然后它为地图图像上的项目创建 UIAccessibilityElement 对象。
问题:
当我延迟一段时间后调用代码时,一切正常。正确的accessibilityFrame 如下所示:
{{0, 184}, {44, 200}}
当我在可访问性容器视图的 -initWithFrame: 中调用上述代码时,-convertRect:toWindow: 将所有值除以 2。框架变得更小且错误。错误的accessibilityFrame 如下所示:
{{0, 220}, {22, 100}}
似乎 -convertRect:toWindow: 方法有一个错误,在 -applicationDidFinishLaunching 之后调用过快时会导致它无法正常工作... 是否有解决方法可以安全地将其转换为正确的屏幕坐标?