美文网首页
支持辅助行功能

支持辅助行功能

作者: 面试小集 | 来源:发表于2018-04-06 17:58 被阅读60次

    前言

    为什么翻译这系列文章

    概述

    一个可访问的app是可以被每一个使用的,包含哪些残疾和身体有障碍的人士,同时保留其功能和可用性作为有用的工具。为了可以被访问,iOSApp必须使用户界面上的元素支持VoiceOver,以供视觉受损的用户可以与这些元素交互。UIKit对象默认是可访问的,但仍然可以从视图控制器的角度来解决可访问性的问题,包括:

    • 确保界面中的每个用户元素均可访问,包括控件和静态元素(如标签)。
    • 确保无障碍元素提供准确有用的信息。

    你可以通过编程的方式设置VoiceOver对焦环的位置,通过响应特殊的VoiceOver手势以及观察辅助功能通知来增强VoiceOver用户在您的应用中的体验。

    将VoiceOver光标移动到指定的元素

    当你的App在屏幕上展示一个新的视图的时候,请考虑设置VoiceOver光标的位置。当屏幕的布局发生变化的时候,VoiceOver光标也会被重置,默认的重置方式是会聚焦在界面上从左到右,上到下的第一个元素上。将光标放在更合适的元素上可以加速用户对界面的导航。举例来说,当将新的视图控制器推入到导航控制器的堆栈上时,VoiceOver光标会落在导航栏的“后退”按钮上。你可能需要将光标移动到导航栏的标题或者新推入的页面的元素。

    要改变光标的位置,可以使用UIAccessibilityPostNotification函数发出一个UIAccessibilityScreenChangedNotification通知。这个通知告诉VoiceOver界面上的内容发生了改变。当发送这个通知时,指定你想让光标位于的元素上,如下代码所示:

    @implementation MyViewController
    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
     
        UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
                                        self.myFirstElement);
    }
    @end
    
    

    布局改变,包括屏幕旋转都会重置VoiceOver的位置。当你的ViewController的布局发生改变时,像发送UIAccessibilityScreenChangedNotification 一样发送 UIAccessibilityLayoutChangedNotification通知,你可以指定VoiceOver光标处于哪一个元素上。

    响应特定的VoiceOver手势

    VoiceOver定义了5种手势来触发app指定的操作。

    • Escape 双指Z形手势,用于消除模式对话框,或返回导航层次结构中的一个级别。
    • Magic Tap 双指双击,执行最有意的动作。
    • Three-Finger Scroll 三指滑动,可以垂直或水平滚动内容。
    • Increment 单指向上滑动即可增加元素中的值。
    • Decrement 单指向下滑动可减少元素中的值。

    使用这些手势来执行特定于您的视图和视图控制器的任务。 UIKit查找实现与手势相对应的方法的方法。它使用响应者链搜索该方法,从拥有VoiceOver焦点的元素开始。如果没有对象实现对应的方法,UIKit将为该手势执行默认的系统操作。例如,如果在当前视图或者代理中找不到“Magic Tap”实现,则“Magic Tap”手势将播放并暂停音乐应用中的音乐播放。

    尽管您可以在处理程序中采取任何想要的操作,但VoiceOver用户希望您的应用程序的操作符合特定的指导原则。与任何手势一样,VoiceOver手势的实施应遵循一种模式,以便与可访问应用的交互保持直觉。

    所有特殊的VoiceOver手势方法都会返回一个布尔值,以确定是否通过响应者链传播。要停止传播,请返回YES;否则,退回NO。

    Escape

    使用accessibilityPerformEscape方法来处理Escape手势。对于覆盖内容的视图(例如模式对话框或弹框),请使用该方法关闭叠加层。 Escape手势的功能就像电脑键盘上Esc键的功能一样;它会取消临时对话框或工作表以显示主要内容。您也可以使用Escape手势导航自定义导航层次结构中的一个级别。如果您已经使用已经处理此手势的UINavigationController对象,则不需要实现此手势。

    Magic Tap

    使用accessibilityPerformMagicTap方法处理Magic Tap手势。 Magic Tap手势可以快速执行常用或最有意的操作。例如,在电话应用程序中,Magic Tap启动或挂断电话,在Clock应用程序中,Magic Tap启动并停止秒表。您可以使用此手势来触发与VoiceOver光标突出显示的元素不相关的操作。要从应用程序中的任何位置处理Magic Tap手势,请在app的代理中实现accessibilityPerformMagicTap方法。

    Three-Finger Scroll

    使用accessibilityScroll方法来滚动自定义视图中的内容,当VoiceOver用户使用Three-Finger Scroll手势的时候。显示书籍页面的自定义视图可能会使用该手势来实现翻页操作。传递给该方法的参数是滚动的方向。

    Increment and Decrement

    使用accessibilityIncrementaccessibilityDecrement方法来增加或者减少元素中的值。使用UIAccessibilityTraitAdjustable属性的元素必须实现这个方法。

    监听辅助功能通知

    UIKit发送辅助相关事件的通知给你的App。你App中的对象可以监听相关的通知并使用它们执行相关的任务。举例来说:iBookApp使用UIAccessibilityAnnouncementDidFinishNotification通知为了当VoiceOver完成读出页面最后一行内容时,翻页并继续阅读。此行为提供了无缝,不间断的阅读体验。

    使用默认的通知中心来注册一个辅助监听。下面的代码展示了一个记录公告的阅读是成功了还是被用户打断了。

    @implementation MyViewController
        
    -(void)viewDidLoad {
        [super viewDidLoad];
        [NSNotificationCenter defaultCenter]
            addObserver:self
                selector:@selector(didFinishAnnouncement:)
                    name:UIAccessibilityAnnouncementDidFinishNotification
                    object: nil];
    }
    
    - (void)didFinishAnnouncement:(NSNotification *)dict {
        NSString *valueSpoken = [[dict userInfo]
                                 objectForKey:UIAccessibilityAnnouncementKeyStringValue];
        NSString *wasSuccessful = [[dict userInfo] 
                                   objectForKey:UIAccessibilityAnnouncementKeyWasSuccessful];
    }
    @end
    

    另一个有用的通知是UIAccessibilityVoiceOverStatusChanged你可以使用这个通知来判断VoiceOver在什么时间打开或者关闭。如果这个通知在App挂起的状态发生,你可以在App进入前台的时候接受到这个通知。

    其他你可以使用到的辅助类功能监听可以参考UIAccessibility

    相关文章

      网友评论

          本文标题:支持辅助行功能

          本文链接:https://www.haomeiwen.com/subject/liushftx.html