CustomContentAccessbility用于展示在自定义绘制的UIView和UIControl中的可访问性,演示如何展示每个地图项的辅助元素,在容器视图中实现UIAccessibilityContainer协议与iOS辅助系统的交互。
UIAccessibility非正式协议提供了应用程序用户接口元素的辅助信息。默认情况下,标准的UIKit控制和视图实现了UIAccessibility方法,因此可以访问辅助应用。这就意味着如果你的应用如果只是用标准的控制和视图,像UIButton、UISegmentedControl或者UITableView的话,在默认值没有完成的情况下,你只需要申请应用指定的细节即可。你可以在IB里设置,也可以在这个非正式协议中设置属性。
UIAccessibility非正式协议也可由UIAccessibilityElement类来实现,该类代表了自定义的用户接口对象。如果你自己创建了一个完全的UIView子类,你可能需要创建一个UIAccessibilityElement对象来代表它,并且需要保证所有UIAccessibility属性都设置正确,返回accessibility元素属性。
1.APLAppDelegate.h
1)添加UIGuidedAccessRestrictionDelegate协议:允许你在iOS里的引导访问功能添加自定义限制。
2.APLAppDelegate.m
1)static NSString *const kControlsRestrictionIdentifier = @"com.apple.CustomContentAccessibility.ControlsRestrictionIdentifier";
创建识别码
2)声明私有变量:@property (strong, nonatomic) APLViewController *viewController;
3)在APLAppDelegate方法中添加viewController为根视图
4)实现UIGuideAccessRestrictionDelegate中的方法:
a.- (NSString *)detailTextForGuidedAccessRestrictionWithIdentifier:(NSString *)restrictionIdentifier :对于提供的标识符返回有关限制的更多详细信息。
b.- (NSArray *)guidedAccessRestrictionIdentifiers :返回标识符数组。
c.- (void)guidedAccessRestrictionWithIdentifier:(NSString *)restrictionIdentifier didChangeState:(UIGuidedAccessRestrictionState)newRestrictionState : 改变状态
d.- (NSString *)textForGuidedAccessRestrictionWithIdentifier:(NSString *)restrictionIdentifier
其中d方法是可选的,另外三个方法必须实现,在UIGuidedAccessRestriction.h中可以查看。
3.APLCommon.h/.m
定义常量:字体大小,线条宽度,层数等
4.APLCoffeeControl.h
1)@property (nonatomic, getter = isOn) BOOL on :如果这个property是BOOL on的话,那么OC默认创建的setter和getter方法为:- (void)on:(BOOL)setOn {} 和- (BOOL)on {return on;}。但是可以手动更改setter和getter,如上面的getter = xxxOn,则getter方法为- (BOOL)xxxOn { return on; }。
5.APLCoffeeControl.m
1)添加私有方法:- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)swipeGestureRecognizer;
Swipe:扫、刷的动作
2)覆写UIControl的方法:
a.- (void)drawRect:(CGRect)rect :
self.enabled:布尔值enabled确定接收者是否启用。
b.绘制label:NSAttributedString *labelAttributedString = [[NSAttributedString alloc] initWithString:@"Coffee" attributes:@{ NSFontAttributeName: [UIFont boldSystemFontOfSize:kFontSize * 2.0], NSForegroundColorAttributeName : [UIColor blackColor] }];
[labelAttributedString drawAtPoint:CGPointMake(CGRectGetMidX(bounds) - labelAttributedString.size.width * 0.5, kPadding * 2.0)];(用代码写控件时可参照)
c.根据isOn的状态来确认开关状态的布局
d.覆写enabled的setter方法
3)UIAccessibilityElement
a.- (BOOL)isAccessibilityElement
b.- (NSString *)accessibilityHint
c.- (NSString *)accessibilityLabel
d.- (NSString *)accessibilityValue
e.- (UIAccessibilityTraits)accessibilityTraits
f.- (BOOL)accessibilityActivate :激活辅助功能来处理默认动作。成功实现则返回YES,默认值是NO
4)Properties
a.- (void)setOn:(BOOL)on
5)Actions
4.APLElevatorControl.h
5.APLElevatorControl.m
1)覆写绘制方法:-(void)drawRect:(CGRect)rect
2)UIBezierPath类让你可以定义由直线和曲线线段组成的路径,并在自定义视图中展示出来。可以只指定几何图形。路径能被定义为像矩形,圆,曲线等简单图形,也可以定义为复杂的多边形,或者直线和曲线组成的混合图形。定义图形后,可以使用额外的方法来呈现当前绘图上下文的路径。
3)[UIBezierPath bezierPathWithOvalInRect:downControlRect]; :在指定的框架里绘制一个椭圆
4)UIBezierPath对象设置填充颜色之前,要先设置好颜色,再调用方法填充:[[UIColor blackColor] fill]; [path setFill]; [[UIColor lightGrayColor] stroke]; [path setStroke];
5)[touch locationInView:self] :在给定的视图中返回接收者的坐标位置
6)UIAccessibilityElement的基本方法:
a.NSNumberFormatter:NSNumberFormatter格式化cell的文字表述。该表述包含了NSNumber对象和将数值文本转换为NSNumber对象
b.如果某个元素有UIAccessibilityTraitAdjustable的特点,它必须实现以下方法:
1.- (void)accessibilityIncrement
2.- (void)accessibilityDecrement
c.UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); :传递通知给辅助应用。如果你的用户界面元素改变比较快又或者出现和隐藏时,你就需要传递通知
6.APLFloorPlanView.h
7.APLFloorPlanView.m
1)UIAccessibilityContainer协议:为了让rooms和coffee这些对象不支持辅助功能,APLFloorPlanView需要通过UIAccessibilityContainer协议与iOS的辅助系统进行交互
a.- (NSArray *)accessibilityElements :为平面图创建了Accessibility还不存在的元件并返回调用者。元件的外形由accessibilityPath表示
b.- (BOOL)isAccessibilityElement :辅助容器必须返回NO
c.- (id)accessibilityElementAtIndex:(NSInteger)index :基于索引返回辅助元素的顺序,默认是nil
d.- (NSInteger)accessibilityElementCount :返回容器中的元素数目
e.- (NSInteger)indexOfAccessibilityElement:(id)element :返回有序索引的辅助元素,默认是NSNotFound
2)平面图的图形路径:起点使用movetoPoint方法设置,addLineToPoint:方法增加两点间的线段,最后可以用closePath封闭起来
3)Properties