5

特にcocos2dフレームワークから、openGLビューで作業するボイスオーバーを取得しようとしています。

Apple アクセシビリティ ガイドから、次のセクションに従いました:カスタム コンテナ ビューのコンテンツをアクセス可能にする

非公式の UIAccessibilityContainer プロトコルを実装するために、UIView であるビュー (cocos2d の場合は CCGLView) をサブクラス化しました。

サブクラス化された UIView の UIAccessibilityContainer 実装:

-(NSArray *)accessibilityElements{
return [self.delegate accessibleElements];
}

-(BOOL)isAccessibilityElement{
return NO;
}
-(NSInteger)accessibilityElementCount{
return [self accessibilityElements].count;
}
-(NSInteger)indexOfAccessibilityElement:(id)element{
return [[self accessibilityElements] indexOfObject:element];
}
-(id)accessibilityElementAtIndex:(NSInteger)index{
return [[self accessibilityElements] objectAtIndex:index];
}

このコードが呼び出され、-(NSArray *)acessibilityElementsUIAccessibilityElements の配列を返しています。ただし、画面に触れてもボイスオーバー コントロールが表示されません。私が行方不明または間違っていることについてのアイデアはありますか?

その他の情報:

ストーリーボードを使用しており、CCGLView をストーリーボードの UIView に追加しています。_director.view は、サブクラス化した CCGLView です。

 // Add the director as a child view controller.
[self addChildViewController:_director];

// Add the director's OpenGL view, and send it to the back of the view hierarchy so we can place UIKit elements on top of it.
[self.view addSubview:_director.view];
[self.view sendSubviewToBack:_director.view];

しばらくの間、サブビューを追加したため、これが表示されないのではないかと疑っていましたが、ストーリーボードで UIView を同じ方法でサブクラス化しようとしましたが、うまくいきませんでした。

また、これは配列内の各 UIAccessibilityElement を作成する方法です。

UIAccessibilityElement *elm = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:view];
    elm.accessibilityFrame = f;
    elm.accessibilityLabel = t.letter;
    elm.isAccessibilityElement = YES;
    elm.accessibilityHint = @"Button";
    elm.accessibilityValue = t.letter;
    elm.accessibilityTraits = UIAccessibilityTraitButton;
4

1 に答える 1

8

誰かがこの問題を抱えている場合に備えて、現在機能している解決策を見つけました。 -(id)accessibilityElementAtIndex:(NSInteger)index適切なものを返してUIAccessibilityElementいましたが、AccessibilityAPIが使用しているものによって保持されていなかったようです。UIAccessibilityElementsを保持するための強力なNSArrayプロパティを作成しましたが、正常に機能しています。

于 2012-12-05T15:56:10.443 に答える