Sto tentando di aggiungere il supporto per l'accessibilità Voice Over in un puzzle game che ha una scheda fissa. Tuttavia, ho difficoltà a visualizzare UIAccessibilityElements
.Accessibilità (Voice Over) con il kit Sprite
In questo momento sto ignorando accessibilityElementAtIndex
, accessibilityElementCount
e indexOfAccessibilityElement
nel mio SKScene.
Sono restituendo un array di elementi accessibili come tale:
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)
}
}
Dove pezzo è una sottoclasse di SKSpriteNode
e getAccessibilityFrame
è definito:
func getAccessibilityFrame() -> CGRect
{
return parentView!.convertRect(frame, toView: nil)
}
momento uno (erroneamente dimensioni) accessibility
elemento sembra apparire sullo schermo nel posto sbagliato.
Qualcuno potrebbe indicarmi la giusta direzione?
Molte grazie
EDIT:
Ho provato un lavoro hack-ish intorno ponendo un UIView sopra la SKView con elementi UIButton nella stessa posizione del SKSpriteNodes. Tuttavia, l'accessibilità non vuole ancora funzionare. La vista viene caricata come tale:
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)
}
I pulsanti sono posizionati correttamente, tuttavia l'accessibilità non funziona affatto. Qualcosa sembra impedirgli di funzionare.
Oltre a questo, ho cercato un altro modo - ho aggiunto una visualizzazione secondaria di UIButtons in sovrapposizione stessa posizione esatta come skspritenodes . Sono rimasto sorpreso dal fatto che anche questi pulsanti non possano essere ascoltati da Voice Over. Ho fatto un errore bloccando gli input? Lo skscene stesso sovrascrive touchBegun (...) ecc. – Mason