Ich versuche, Unterstützung für Voice Over Zugänglichkeit in einem Puzzle-Spiel, das ein festes Board hat. Allerdings habe ich Probleme, UIAccessibilityElements
zu bekommen.Erreichbarkeit (Voice Over) mit Sprite Kit
Im Moment überschreibe ich in meinem SKScene accessibilityElementAtIndex
, accessibilityElementCount
und indexOfAccessibilityElement
.
Sie sind eine Reihe von zugänglichen Elementen als solche zurückkehr:
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)
}
}
Wo Stück eine Unterklasse von SKSpriteNode
und getAccessibilityFrame
definiert ist:
func getAccessibilityFrame() -> CGRect
{
return parentView!.convertRect(frame, toView: nil)
}
Gerade jetzt ein (fälschlich Größe) accessibility
Element scheint auf dem Bildschirm an der falschen Stelle zu erscheinen.
Könnte mir jemand in die richtige Richtung zeigen?
Vielen Dank
EDIT:
ich einen Hack-ish Arbeit um versucht haben, durch eine UIView über die SKView mit UIButton Elemente in der gleichen Position wie die SKSpriteNodes platzieren. Zugänglichkeit will jedoch immer noch nicht funktionieren. Die Ansicht wird folgendermaßen geladen:
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)
}
Die Schaltflächen sind korrekt platziert, die Zugriffsmöglichkeit funktioniert jedoch nicht. Etwas scheint zu verhindern, dass es funktioniert.
Im Anschluss an diese, ich habe einen anderen Weg versucht - Ich habe eine Subview UIButtons in der exakt gleichen Position wie die skspritenodes überlagert . Ich war überrascht, dass diese Tasten auch nicht von Voice-over zugegriffen werden können. Habe ich einen Fehler gemacht, Eingaben zu blockieren? Die Skscene selbst überschreibt die BerührungenBegun (...) usw. – Mason