我观看了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后调用太快时它工作不正确...是否有一种解决方法可以安全地将其转换为正确的屏幕坐标?
答案 0 :(得分:1)
您是否尝试过使用UIAccessibilityConvertFrameToScreenCoordinates
?
这是一个采用CGRect
和UIView
的函数,会将矩形从UIScreen
坐标空间转换为UIView's
坐标。