Accesibilidad (voz en off) con Sprite Kit
Estoy intentando agregar soporte para la accesibilidad de Voice Over en un juego de rompecabezas que tiene un tablero fijo. Sin embargo, tengo problemas para conseguirUIAccessibilityElements
para mostrar.
Ahora estoy anulandoaccessibilityElementAtIndex
, accessibilityElementCount
yindexOfAccessibilityElement
en mi SKScene
Están devolviendo una serie de elementos accesibles como tales:
func loadAccessibleElements()
{
self.isAccessibilityElement = false
let pieces = getAllPieces()
accessibleElements.removeAll(keepCapacity: false)
for piece in pieces
{
let element = UIAccessibilityElement(accessibilityContainer: self.usableView!)
element.accessibilityFrame = piece.getAccessibilityFrame()
element.accessibilityLabel = piece.getText()
element.accessibilityTraits = UIAccessibilityTraitButton
accessibleElements.append(element)
}
}
Donde pieza es una subclase deSKSpriteNode
ygetAccessibilityFrame
se define:
func getAccessibilityFrame() -> CGRect
{
return parentView!.convertRect(frame, toView: nil)
}
En este momento uno (tamaño incorrecto)accessibility
El elemento parece aparecer en la pantalla en el lugar equivocado.
¿Podría alguien señalarme en la dirección correcta?
Muchas gracias
EDITAR:
He intentado un trabajo alternativo colocando una UIView sobre el SKView con elementos UIButton en la misma ubicación que los SKSpriteNodes. Sin embargo, la accesibilidad todavía no quiere funcionar. La vista se carga como tal:
func loadAccessibilityView()
{
view.isAccessibilityElement = false
view.accessibilityElementsHidden = false
skView.accessibilityElementsHidden = false
let accessibleSubview = UIView(frame: view.frame)
accessibleSubview.userInteractionEnabled = true
accessibleSubview.isAccessibilityElement = false
view.addSubview(accessibleSubview)
view.bringSubviewToFront(accessibleSubview)
let pieces = (skView.scene! as! GameScene).getAllPieces()
for piece in pieces
{
let pieceButton = UIButton(frame: piece.getAccessibilityFrame())
pieceButton.isAccessibilityElement = true
pieceButton.accessibilityElementsHidden = false
pieceButton.accessibilityTraits = UIAccessibilityTraitButton
pieceButton.setTitle(piece.getText(), forState: UIControlState.Normal)
pieceButton.setBackgroundImage(UIImage(named: "blue-button"), forState: UIControlState.Normal)
pieceButton.alpha = 0.2
pieceButton.accessibilityLabel = piece.getText()
pieceButton.accessibilityFrame = pieceButton.frame
pieceButton.addTarget(self, action: Selector("didTap:"), forControlEvents: UIControlEvents.TouchUpInside)
accessibleSubview.addSubview(pieceButton)
}
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil)
}
Los botones están colocados correctamente, sin embargo, la accesibilidad simplemente no funciona en absoluto. Algo parece estar evitando que funcione.