2

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

4

1 に答える 1

1

使ってみましたUIAccessibilityConvertFrameToScreenCoordinatesか?これは aCGRectと aUIViewを受け取る関数で、rect を座標空間UIScreenから座標に変換します。UIView's

于 2016-04-12T20:55:02.683 に答える