アクセシビリティに関する 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 の後で呼び出すのが速すぎると正しく動作しないようです...正しい画面座標に安全に変換するための回避策はありますか?