iOS上的VoiceOver:每个控件的行为都不同

哈Ha!最近,我谈到了适应盲人和一动不动的人的应用程序。并没有完成!

今天,我将告诉您如何在帮助下更改控件的行为,accessibilityTraits并使盲人的生活更加方便。知道这些特征的工作很重要,以免写下拐杖。



改编iOS应用程序是一个很大的话题,所有内容都不适合一篇文章,因此我分系列发布了它们。

  1. 语音控制和VoiceOver:如何使应用程序适应盲人或静止者
  2. iOS上的VoiceOver:每个控件的行为都不同。
  3. iOS上的VoiceOver:解决常见问题。
  4. VoiceOver,语音控制和UI测试的实现之间的区别。(进行中)

在第一部分中,我们开始使用VoiceOver处理盲人应用程序的适应问题:签名控件,对其进行分组,固定导航。在本文中,我们将进一步研究可以赋予控件的“功能”,以改善控件对盲人的工作并总体上提高应用程序的可用性。

控制功能-特性收集


VoiceOver具有一组标准的“功能” UITraitCollection,您可以将它们应用于控件。事先了解它们很重要,以免提出您自己的解决方案。我将它们分为三种类型:

  1. 控制类型。
  2. 控制状态。
  3. 控件的特殊属性。

我将立即在带有披萨卡的屏幕示例中显示:



控制类型


VoiceOver知道一些基本元素类型。其中一些已经在您的项目中配置,但是无论如何我都会告诉您。

控件类型用于导航:您可以使用转子快速浏览它们

  • .staticText-铭文不变。文字易于阅读。
  • .header-标题:添加到比萨中,标题。
  • .button-按钮。签名活动控件的主要方法:更改组成,按钮。
  • .image -图片。
  • .link-链接。稀有的应用程序访客,经常在站点上访问。
  • .searchField -搜索。

我们来看一个例子:


  1. 标明标题。.staticText为所有标签自动设置,但是.header对于标题,您需要手动放置。当需要.header和时.staticText
  2. 在图片下方标记位置。上一次我们从VoiceOver隐藏所有小图片时,我们没有丢失信息内容。这次图片很大,所以隐藏起来不是那么容易:这个地方会变成空的,这很奇怪。我们在.image签名时标记图片.accessibilityLabel = " "

当然,关闭按钮和购物篮必须签名,这是上一篇文章中的内容。

控制状态


控件可以具有三种状态:正常,选中和禁用。有趣的是,它们在不同的时间发音,可以同时选择:



  • .selected-在控件名称的前面添加“ selected”。适用于所有开关和复选框。
  • .notEnabled-添加“不可用”。此设置在中不可见,Interface Builder只能通过编程控制。

向披萨添加配料的示例:


使用状态,您可以向用户说明已添加配料将其固定在牢房内部很方便。accessibilityTraitsOptionSet就是为什么可以将insert .formUnion和delete 方法应用于它的原因.formIntersection

class ToppingCell: UICollectionViewCell {
    override var isSelected: Bool {
        didSet {
            if isSelected {
                accessibilityTraits.formUnion(.selected)
            } else {
                accessibilityTraits.formIntersection(.selected)
            }
        }
    }
    ...
}

控件的特殊属性


还有一些其他不寻常的属性。在我们的情况下,它们不适合披萨屏幕,但无论如何我都会告诉您,因为关于它们的信息很少。也许这可以节省您的时间。

  • .summaryElement — , . , , . , .
  • .updatesFrequently —  . .
  • .causesPageTurn —  . accessibilityScroll(.next) , . .firstResponder.
  • .startsMediaSession —  VoiceOver , . , . , VoiceOver .
  • .playsSound —  , ( , ).
  • .allowsDirectInteraction-用于绘制和处理手势。控件会立即处理触摸,就像VoiceOver已关闭一样。
  • .keyboardKey-控件开始像键盘上的按钮一样做出反应。在这种情况下,VoiceOver有几种文本输入模式:

    -- standart typing作为VoiceOver中的简单按钮:首先将重点放在字母上,然后在任意位置点按两次以进行书写。您可以用双手更快地键入内容:用一根手指驱动键盘(将显示字母),并用另一根手指触摸以确认键的选择。
    -- touch typing单臂快速拨号:在键盘上滑动手指以找到语音按钮。松开手指写字母。
    -- direct touch typing就像常规设置一样,好像VoiceOver已关闭。

有关不同输入法的视频:


只需选中IB框即可添加行为。拥有.adjustable特质,将它分开将变得不那么容易。

配置强大的.adjustable特性


而最后,特别重要的特点.adjustable是可以调节的元素:这是怎么UIStepper工作UISlider向上向下滑动此控件以更改值(不要忘记向左/向右滑动会将焦点切换到相邻元素)。如果控件具有UIPanGestureRecognizer,则可以点按两次并按住第二个点按,这样手势就可以工作,并且可以直接控制它,就像VoiceOver已关闭一样。

应用实例.adjustable

测试开关。测试设置包括五个按钮:三个用于选择比萨饼的大小,两个用于测试的类型。应该对它们进行分组和签名,以便剩下五个,而不是五个:“大小,平均值。调整项目“面团,传统的。调整项。”



需要分4个步骤进行:

  1. 使带有按钮的容器可用。
  2. 放个特质.adjustable
  3. 实施增加和减少的方法。
  4. 返回的新值.accessibilityValue

override public func awakeFromNib() {
        super.awakeFromNib()
        
        isAccessibilityElement = true // 1
        accessibilityTraits = .adjustable // 2
    }


extension SegmentedControl {
    override public func accessibilityIncrement() { // 3
        controller.selectNext(increment: +1)
    }
    
    override public func accessibilityDecrement() { // 3
        controller.selectNext(increment: -1)
    }
    
    public override var accessibilityValue: String? { // 4
        get {
            return selectedSegment?.accessibilityValue
        } set { }
    }
}

现在,调出向上滑动后accessibilityIncrement(),您将增加内部计数器,VoiceOver将从accessibilityValue.

世界上总数量计数中读取新值在此块中,我们看到四个控件:减号按钮,数量,加号按钮和价格。您可以将它们组合view成一个控件,然后将它们变成一个控件:“数量,1,575卢布。调整项。” 垂直滑动后,数量将发生变化,然后将与价格一起显示新值。



水平UICollectionView原来,.adjustable申请水平考试方便UICollectionView例如,选择菜单上的共享或出租车中的汽车。



结论


这次我们确定了特征:它们的类型,状态和行为。这是常见任务的标准集对于复杂的控件,可以使用.adjustable。

下次,让我们看一下常见问题的解决方案:旁路顺序,模态窗口,加载指示器。

为了不错过下一篇文章,请订阅我的Dodo Pizza Mobile频道

现在,我们在移动方向上有一个空缺。所以我就把它留在这里:高级iOS开发人员(下诺夫哥罗德)。


All Articles