如何正确设置UIAccessibilityElement的accessibilityFrame?

时间:2013-07-28 20:00:57

标签: iphone ios objective-c ipad uikit

我观看了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后调用太快时它工作不正确...是否有一种解决方法可以安全地将其转换为正确的屏幕坐标?

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用UIAccessibilityConvertFrameToScreenCoordinates? 这是一个采用CGRectUIView的函数,会将矩形从UIScreen坐标空间转换为UIView's坐标。