特に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 *)acessibilityElements
UIAccessibilityElements の配列を返しています。ただし、画面に触れてもボイスオーバー コントロールが表示されません。私が行方不明または間違っていることについてのアイデアはありますか?
その他の情報:
ストーリーボードを使用しており、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;