【发布时间】:2015-05-12 13:09:48
【问题描述】:
我正在尝试在具有固定棋盘的益智游戏中添加对旁白辅助功能的支持。但是,我无法让 UIAccessibilityElements 出现。
现在我在我的 SKScene 中覆盖 accessibilityElementAtIndex、accessibilityElementCount 和 indexOfAccessibilityElement。
他们正在返回一个可访问元素的数组,如下所示:
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)
}
}
其中piece是SKSpriteNode的子类,getAccessibilityFrame被定义:
func getAccessibilityFrame() -> CGRect
{
return parentView!.convertRect(frame, toView: nil)
}
现在一个(大小错误)accessibility 元素似乎出现在屏幕上的错误位置。
有人能指出我正确的方向吗?
非常感谢
编辑:
我已经尝试了一个 hack-ish 解决方法,方法是在 SKView 上放置一个 UIView,其中 UIButton 元素与 SKSpriteNodes 位于同一位置。但是,可访问性仍然不想工作。视图是这样加载的:
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)
}
按钮放置正确,但可访问性根本不起作用。似乎有什么东西阻止了它的工作。
【问题讨论】:
-
除此之外,我尝试了另一种方法 - 我添加了 UIButtons 的子视图,以覆盖与 skspritenodes 完全相同的位置。我很惊讶这些按钮也无法通过语音访问。我是否犯了错误阻止输入? skscene 本身确实会覆盖 touchesBegun(...) 等。
标签: swift sprite-kit skspritenode uiaccessibility