├── AccessibilitySuite └── AccessibilitySuite │ ├── Readme.md │ ├── en.lproj │ └── InfoPlist.strings │ ├── Images │ ├── Shapes~ipad.png │ ├── Shapes@2x~ipad.png │ ├── Shapes~iphone.png │ ├── Shapes@2x~iphone.png │ ├── glossyButton-normal.png │ ├── glossyButton-disabled.png │ ├── glossyButton-highlighted.png │ ├── glossyButtonWithText-normal.png │ ├── SegmentedControlFirstTabImage.png │ ├── glossyButtonWithText-disabled.png │ ├── SegmentedControlFirstTabImage@2x.png │ ├── SegmentedControlSecondTabImage.png │ ├── glossyButtonWithText-highlighted.png │ ├── SegmentedControlFirstTabImage copy.png │ ├── SegmentedControlSecondTabImage@2x.png │ ├── SegmentedControlFirstTabImage@2x copy.png │ ├── SegmentedControlSecondTabImage copy.png │ └── SegmentedControlSecondTabImage@2x copy.png │ ├── main.m │ ├── AccessibilitySuite-Prefix.pch │ ├── ASPageSlider.h │ ├── ASSliderViewController.h │ ├── ASViewController.h │ ├── ASButtonViewController.h │ ├── ASContainerViewController.h │ ├── ASAccessibilityElement.h │ ├── ASRootViewController.h │ ├── ASAccessibleImageView.h │ ├── ASAppDelegate.h │ ├── ASViewController.m │ ├── ASCustomizedPageSlider.h │ ├── ASSegmentedControlViewController.h │ ├── AccessibilitySuite-Info.plist │ ├── ASAppDelegate.m │ ├── ASSliderViewController.m │ ├── ASAccessibilityElement.m │ ├── ASSegmentedControlViewController.m │ ├── ASPageSlider.m │ ├── ASContainerViewController.m │ ├── ASAccessibleImageView.m │ ├── ASButtonViewController.m │ ├── ASRootViewController.m │ ├── ASCustomizedPageSlider.m │ ├── ASSliderViewController~ipad.xib │ ├── ASSliderViewController~iphone.xib │ ├── ASSegmentedControlViewController~ipad.xib │ └── ASSegmentedControlViewController~iphone.xib └── AccessibilityReadingContent ├── ReadingContent ├── en.lproj │ └── InfoPlist.strings ├── main.m ├── ReadingContent-Prefix.pch ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── LaunchImage.launchimage │ │ └── Contents.json ├── AXAppDelegate.m ├── AXTextContainerView.h ├── AXPagedViewController.h ├── AXAppDelegate.h ├── AXTextReadingContentView.h ├── AXTextView.h ├── AXTextView_Internal.h ├── AXTextViewController.h ├── ReadingContent-Info.plist ├── AXTextViewController.m ├── AXTextView.m ├── AXTextContainerView.m ├── AXPagedViewController.m ├── AXTextReadingContentView.m └── Main.storyboard └── ReadingContent.xcodeproj ├── xcshareddata └── xcdebugger │ └── Breakpoints_v2.xcbkptlist └── project.pbxproj /AccessibilitySuite/AccessibilitySuite/Readme.md: -------------------------------------------------------------------------------- 1 | ##Accessibility Suite -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/Shapes~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/Shapes~ipad.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/Shapes@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/Shapes@2x~ipad.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/Shapes~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/Shapes~iphone.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/Shapes@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/Shapes@2x~iphone.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/glossyButton-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/glossyButton-normal.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/glossyButton-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/glossyButton-disabled.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/glossyButton-highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/glossyButton-highlighted.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/glossyButtonWithText-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/glossyButtonWithText-normal.png -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/glossyButtonWithText-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/glossyButtonWithText-disabled.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage@2x.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/glossyButtonWithText-highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/glossyButtonWithText-highlighted.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage copy.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage@2x.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage@2x copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlFirstTabImage@2x copy.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage copy.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage@2x copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rustle/Accessibility/HEAD/AccessibilitySuite/AccessibilitySuite/Images/SegmentedControlSecondTabImage@2x copy.png -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ASAppDelegate.h" 11 | 12 | int main(int argc, char *argv[]) 13 | { 14 | @autoreleasepool { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([ASAppDelegate class])); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AXAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AXAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/ReadingContent-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_3_0 10 | #warning "This project uses features only available in iOS SDK 3.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/AccessibilitySuite-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'AccessibilitySuite' target in the 'AccessibilitySuite' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_5_0 8 | #warning "This project uses features only available in iOS SDK 5.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | 16 | #define ISIPAD [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASPageSlider.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASPageSlider.h 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import 21 | 22 | @interface ASPageSlider : UISlider 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AXAppDelegate.m 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXAppDelegate.h" 22 | 23 | @implementation AXAppDelegate 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSliderViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASSliderViewController.h 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import "ASViewController.h" 21 | 22 | @interface ASSliderViewController : ASViewController 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASViewController.h 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | 23 | @interface ASViewController : UIViewController 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextContainerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextContainerView.h 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXTextView.h" 22 | 23 | @interface AXTextContainerView : AXTextView 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASButtonViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASButtonViewController.h 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) 2012 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASViewController.h" 22 | 23 | @interface ASButtonViewController : ASViewController 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXPagedViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AXPagedViewController.h 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | 23 | @interface AXPagedViewController : UIViewController 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASContainerViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASContainerViewController.h 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) 2012 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASViewController.h" 22 | 23 | @interface ASContainerViewController : ASViewController 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASAccessibilityElement.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASAccessibilityElement.h 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import 21 | 22 | @interface ASAccessibilityElement : UIAccessibilityElement 23 | 24 | @property (assign, nonatomic) CGRect frameRelativeToContainer; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AXAppDelegate.h 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | 23 | @interface AXAppDelegate : UIResponder 24 | 25 | @property (strong, nonatomic) UIWindow *window; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextReadingContentView.h: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextReadingContentView.h 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXTextView.h" 22 | 23 | @interface AXTextReadingContentView : AXTextView 24 | 25 | @property (nonatomic) bool causesPageTurn; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextView.h 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | 23 | @interface AXTextView : UIView 24 | 25 | @property (nonatomic, assign) UIEdgeInsets textInsets; 26 | @property (nonatomic) NSAttributedString *attributedText; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASRootViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASRootViewController.h 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASViewController.h" 22 | 23 | @interface ASRootViewController : ASViewController 24 | 25 | @property (nonatomic) UITableView *tableView; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASAccessibleImageView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASAccessibleImageView.h 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import 21 | 22 | @interface ASAccessibleImageView : UIImageView 23 | 24 | - (void)addAccessibilityElement:(NSString *)label hint:(NSString *)hint frame:(CGRect)frame; 25 | - (void)clearAccessibilityElements; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASAppDelegate.h 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | 23 | @interface ASAppDelegate : UIResponder 24 | 25 | @property (nonatomic) UIWindow *window; 26 | @property (nonatomic) UINavigationController *navigationController; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextView_Internal.h: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextView_Internal.h 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXTextView.h" 22 | 23 | @import CoreText; 24 | 25 | @interface AXTextView () 26 | 27 | @property (nonatomic) __attribute__((NSObject)) CTFrameRef frameRef; 28 | 29 | - (void)ax_reset; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASViewController.m 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASViewController.h" 22 | 23 | @interface ASViewController () 24 | 25 | @end 26 | 27 | @implementation ASViewController 28 | 29 | - (id)init 30 | { 31 | self = [super initWithNibName:nil bundle:nil]; 32 | if (self) 33 | { 34 | 35 | } 36 | return self; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextViewController.h 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import 22 | #import "AXTextView.h" 23 | 24 | @interface AXTextViewController : UIViewController 25 | 26 | @property (nonatomic, weak) IBOutlet AXTextView *textView; 27 | @property (nonatomic) NSAttributedString *text; 28 | @property (nonatomic) bool isLastPage; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASCustomizedPageSlider.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASCustomizedPageSlider.h 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import 21 | 22 | // IMPORTANT: Don't actually use this class, it's just a demonstration of how to make a custom slider accessible. Use UISlider, it's much better. 23 | 24 | @interface ASCustomizedPageSlider : UIControl 25 | 26 | @property (nonatomic) float value; 27 | @property (nonatomic) float minValue; 28 | @property (nonatomic) float maxValue; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSegmentedControlViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ASSegmentedControlViewController.h 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASViewController.h" 22 | 23 | @interface ASSegmentedControlViewController : ASViewController 24 | 25 | @property (weak, nonatomic) IBOutlet UISegmentedControl *segmentedControlText; 26 | @property (weak, nonatomic) IBOutlet UISegmentedControl *segmentedControlImages; 27 | @property (weak, nonatomic) IBOutlet UISegmentedControl *segmentedControlAccessibleImages; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/ReadingContent-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | AX.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/AccessibilitySuite-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.DougRussell.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASAppDelegate.m 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASAppDelegate.h" 22 | #import "ASRootViewController.h" 23 | 24 | @implementation ASAppDelegate 25 | 26 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 27 | { 28 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 29 | self.window.backgroundColor = [UIColor whiteColor]; 30 | self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[ASRootViewController new]]; 31 | [self.window makeKeyAndVisible]; 32 | return YES; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSliderViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASSliderViewController.m 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import "ASSliderViewController.h" 21 | #import "ASPageSlider.h" 22 | #import "ASCustomizedPageSlider.h" 23 | 24 | @interface ASSliderViewController () 25 | @property (weak, nonatomic) IBOutlet UISlider *stockSlider; 26 | @property (weak, nonatomic) IBOutlet ASPageSlider *pageSlider; 27 | @property (weak, nonatomic) IBOutlet ASCustomizedPageSlider *customPageSlider; 28 | - (IBAction)valueChanged:(id)sender; 29 | @end 30 | 31 | @implementation ASSliderViewController 32 | 33 | #pragma mark - Init/Dealloc 34 | 35 | - (id)init 36 | { 37 | self = [super init]; 38 | if (self) 39 | { 40 | self.title = @"Sliders"; 41 | } 42 | return self; 43 | } 44 | 45 | - (IBAction)valueChanged:(id)sender 46 | { 47 | NSLog(@"Value Changed"); 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextViewController.m 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXTextViewController.h" 22 | #import "AXTextReadingContentView.h" 23 | 24 | @interface AXTextViewController () 25 | 26 | @end 27 | 28 | @implementation AXTextViewController 29 | 30 | - (void)setIsLastPage:(bool)isLastPage 31 | { 32 | _isLastPage = isLastPage; 33 | [self ax_configureCausesPageTurn]; 34 | } 35 | 36 | - (void)setTextView:(AXTextView *)textView 37 | { 38 | if (textView != _textView) 39 | { 40 | _textView = textView; 41 | [self ax_configureCausesPageTurn]; 42 | } 43 | } 44 | 45 | - (void)ax_configureCausesPageTurn 46 | { 47 | if ([self.textView respondsToSelector:@selector(setCausesPageTurn:)]) 48 | { 49 | ((AXTextReadingContentView *)self.textView).causesPageTurn = !self.isLastPage; 50 | } 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASAccessibilityElement.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASAccessibilityElement.m 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import "ASAccessibilityElement.h" 21 | 22 | @implementation ASAccessibilityElement 23 | { 24 | bool hasViewContainer; 25 | } 26 | 27 | - (instancetype)initWithAccessibilityContainer:(id)container 28 | { 29 | self = [super initWithAccessibilityContainer:container]; 30 | if (self) 31 | { 32 | hasViewContainer = [container isKindOfClass:[UIView class]]; 33 | } 34 | return self; 35 | } 36 | 37 | - (CGRect)accessibilityFrame 38 | { 39 | if (!hasViewContainer) 40 | return [super accessibilityFrame]; 41 | // accessibilityFrame is in screen coordinates, so do some hoop jumping to convert 42 | UIWindow *window = [[self accessibilityContainer] window]; 43 | if (window == nil) 44 | return self.frameRelativeToContainer; 45 | CGRect frame = self.frameRelativeToContainer; 46 | frame = [[self accessibilityContainer] convertRect:frame toView:window]; 47 | frame = [window convertRect:frame toWindow:nil]; 48 | return frame; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSegmentedControlViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASSegmentedControlViewController.m 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASSegmentedControlViewController.h" 22 | 23 | // Note of possible interest: 24 | // The segmented controls take their accessibility labels from their images 25 | // which is why they're being manipulated in view did load. 26 | // This demo uses IB and the nib loading logic can sometimes reuse 27 | // the same UIImage instance, so it was necessary to add an extra copy 28 | // of the segmented control images to demonstrate the case where 29 | // labels are extracted from png file names. 30 | 31 | @interface ASSegmentedControlViewController () 32 | 33 | @end 34 | 35 | @implementation ASSegmentedControlViewController 36 | 37 | #pragma mark - Init/Dealloc 38 | 39 | - (id)init 40 | { 41 | self = [super init]; 42 | if (self) 43 | { 44 | self.title = @"Segmented Controls"; 45 | } 46 | return self; 47 | } 48 | 49 | #pragma mark - View Life Cycle 50 | 51 | - (void)viewDidLoad 52 | { 53 | [super viewDidLoad]; 54 | [self.segmentedControlAccessibleImages imageForSegmentAtIndex:0].accessibilityLabel = @"Left"; 55 | [self.segmentedControlAccessibleImages imageForSegmentAtIndex:1].accessibilityLabel = @"Right"; 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASPageSlider.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASPageSlider.m 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import "ASPageSlider.h" 21 | 22 | @interface ASPageSlider () 23 | - (void)updateAccessibilityValue; 24 | @end 25 | 26 | @implementation ASPageSlider 27 | 28 | static void CommonInit(ASPageSlider *self) 29 | { 30 | [self updateAccessibilityValue]; 31 | } 32 | 33 | - (id)initWithCoder:(NSCoder *)aDecoder 34 | { 35 | self = [super initWithCoder:aDecoder]; 36 | if (self) 37 | { 38 | CommonInit(self); 39 | } 40 | return self; 41 | } 42 | 43 | - (id)initWithFrame:(CGRect)frame 44 | { 45 | self = [super initWithFrame:frame]; 46 | if (self) 47 | { 48 | CommonInit(self); 49 | } 50 | return self; 51 | } 52 | 53 | - (void)awakeFromNib 54 | { 55 | [self updateAccessibilityValue]; 56 | } 57 | 58 | - (NSString *)accessibilityLabel 59 | { 60 | return @"Page"; 61 | } 62 | 63 | - (void)accessibilityIncrement 64 | { 65 | self.value += 1.0f; 66 | } 67 | 68 | - (void)accessibilityDecrement 69 | { 70 | self.value -= 1.0f; 71 | } 72 | 73 | - (void)setValue:(float)value animated:(BOOL)animated 74 | { 75 | [super setValue:value animated:animated]; 76 | [self updateAccessibilityValue]; 77 | } 78 | 79 | - (void)updateAccessibilityValue 80 | { 81 | self.accessibilityValue = [NSString stringWithFormat:@"%3.0f", self.value]; 82 | } 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASContainerViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASContainerViewController.m 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) 2012 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASContainerViewController.h" 22 | #import "ASAccessibleImageView.h" 23 | 24 | @interface ASContainerViewController () 25 | @property (nonatomic) ASAccessibleImageView *imageView; 26 | @end 27 | 28 | @implementation ASContainerViewController 29 | 30 | #pragma mark - Init/Dealloc 31 | 32 | - (id)init 33 | { 34 | self = [super init]; 35 | if (self) 36 | { 37 | self.title = @"Container"; 38 | } 39 | return self; 40 | } 41 | 42 | #pragma mark - View Life Cycle 43 | 44 | - (void)loadView 45 | { 46 | [super loadView]; 47 | self.imageView = [[ASAccessibleImageView alloc] initWithFrame:self.view.bounds]; 48 | self.imageView.contentMode = UIViewContentModeCenter; 49 | self.imageView.image = [UIImage imageNamed:@"Shapes"]; 50 | if (ISIPAD) 51 | { 52 | [self.imageView addAccessibilityElement:@"Triangle" hint:@"Picture of a triangle" frame:CGRectMake(520.0f, 120.0f, 120.0f, 120.0f)]; 53 | [self.imageView addAccessibilityElement:@"Square" hint:@"Picture of a square" frame:CGRectMake(140.0f, 770.0f, 130.0f, 130.0f)]; 54 | } 55 | else 56 | { 57 | [self.imageView addAccessibilityElement:@"Triangle" hint:@"Picture of a triangle" frame:CGRectMake(30.0f, 50.0f, 120.0f, 120.0f)]; 58 | [self.imageView addAccessibilityElement:@"Square" hint:@"Picture of a square" frame:CGRectMake(170.0f, 230.0f, 130.0f, 130.0f)]; 59 | } 60 | [self.view addSubview:self.imageView]; 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASAccessibleImageView.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASAccessibleImageView.m 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import "ASAccessibleImageView.h" 21 | #import "ASAccessibilityElement.h" 22 | 23 | @interface ASAccessibleImageView () 24 | @property (strong, nonatomic) NSMutableArray *accessibilityElements; 25 | @end 26 | 27 | @implementation ASAccessibleImageView 28 | 29 | #pragma mark - Accessors 30 | 31 | - (BOOL)isAccessibilityElement 32 | { 33 | return NO; 34 | } 35 | 36 | - (NSMutableArray *)accessibilityElements 37 | { 38 | if (_accessibilityElements == nil) 39 | { 40 | _accessibilityElements = [NSMutableArray new]; 41 | } 42 | return _accessibilityElements; 43 | } 44 | 45 | #pragma mark - UIAccessibilityContainer 46 | 47 | - (NSInteger)accessibilityElementCount 48 | { 49 | return self.accessibilityElements.count; 50 | } 51 | 52 | - (id)accessibilityElementAtIndex:(NSInteger)index 53 | { 54 | return [self.accessibilityElements objectAtIndex:index]; 55 | } 56 | 57 | - (NSInteger)indexOfAccessibilityElement:(id)element 58 | { 59 | return [self.accessibilityElements indexOfObject:element]; 60 | } 61 | 62 | #pragma mark - Public 63 | 64 | - (void)addAccessibilityElement:(NSString *)label hint:(NSString *)hint frame:(CGRect)frame 65 | { 66 | if (!label.length) 67 | { 68 | return; 69 | } 70 | ASAccessibilityElement *accElement = [[ASAccessibilityElement alloc] initWithAccessibilityContainer:self]; 71 | if (accElement) 72 | { 73 | accElement.frameRelativeToContainer = frame; 74 | accElement.accessibilityLabel = label; 75 | accElement.accessibilityHint = hint; 76 | accElement.accessibilityTraits = UIAccessibilityTraitStaticText; 77 | [self.accessibilityElements addObject:accElement]; 78 | } 79 | } 80 | 81 | - (void)clearAccessibilityElements 82 | { 83 | [self.accessibilityElements removeAllObjects]; 84 | } 85 | 86 | @end 87 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASButtonViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASButtonViewController.m 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) 2012 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASButtonViewController.h" 22 | 23 | @interface ASButtonViewController () 24 | @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; 25 | @property (weak, nonatomic) IBOutlet UIPageControl *pageControl; 26 | - (IBAction)pageChanged:(UIPageControl *)sender; 27 | @property (weak, nonatomic) IBOutlet UIView *roundedRectButtonView; 28 | @property (weak, nonatomic) IBOutlet UIView *backgroundImageButtonView; 29 | @property (weak, nonatomic) IBOutlet UIView *bakedInTextImageButtonView; 30 | @property (weak, nonatomic) IBOutlet UIView *accessibleImageButtonView; 31 | @end 32 | 33 | @implementation ASButtonViewController 34 | 35 | #pragma mark - Init/Dealloc 36 | 37 | - (id)init 38 | { 39 | self = [super init]; 40 | if (self) 41 | { 42 | self.title = @"Buttons"; 43 | } 44 | return self; 45 | } 46 | 47 | - (void)dealloc 48 | { 49 | _scrollView.delegate = nil; 50 | } 51 | 52 | #pragma mark - View Life Cycle 53 | 54 | - (void)viewDidLoad 55 | { 56 | [super viewDidLoad]; 57 | 58 | self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width * 4, self.scrollView.bounds.size.height); 59 | 60 | CGRect panelRect = self.scrollView.bounds; 61 | self.roundedRectButtonView.frame = panelRect; 62 | [self.scrollView addSubview:self.roundedRectButtonView]; 63 | panelRect.origin.x += panelRect.size.width; 64 | self.backgroundImageButtonView.frame = panelRect; 65 | [self.scrollView addSubview:self.backgroundImageButtonView]; 66 | panelRect.origin.x += panelRect.size.width; 67 | self.bakedInTextImageButtonView.frame = panelRect; 68 | [self.scrollView addSubview:self.bakedInTextImageButtonView]; 69 | panelRect.origin.x += panelRect.size.width; 70 | self.accessibleImageButtonView.frame = panelRect; 71 | [self.scrollView addSubview:self.accessibleImageButtonView]; 72 | } 73 | 74 | #pragma mark - Page Control 75 | 76 | - (IBAction)pageChanged:(UIPageControl *)sender 77 | { 78 | self.scrollView.contentOffset = CGPointMake(sender.currentPage * self.scrollView.bounds.size.width, 0.0f); 79 | } 80 | 81 | #pragma mark - Scroll 82 | 83 | - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 84 | { 85 | self.pageControl.currentPage = trunc(scrollView.contentOffset.x / scrollView.bounds.size.width); 86 | } 87 | 88 | @end 89 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASRootViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ESRootViewController.m 3 | // AccessibilitySuite 4 | // 5 | // Created by Doug Russell 6 | // Copyright (c) Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "ASRootViewController.h" 22 | #import "ASSegmentedControlViewController.h" 23 | #import "ASButtonViewController.h" 24 | #import "ASContainerViewController.h" 25 | #import "ASSliderViewController.h" 26 | 27 | @interface ASRootViewController () 28 | 29 | @end 30 | 31 | @implementation ASRootViewController 32 | @synthesize tableView=_tableView; 33 | 34 | #pragma mark - Init / Dealloc 35 | 36 | - (id)init 37 | { 38 | self = [super init]; 39 | if (self) 40 | { 41 | self.title = @"Accessibility Samples"; 42 | } 43 | return self; 44 | } 45 | 46 | - (void)dealloc 47 | { 48 | _tableView.delegate = nil; 49 | _tableView.dataSource = nil; 50 | } 51 | 52 | #pragma mark - View Life Cycle 53 | 54 | - (void)loadView 55 | { 56 | [super loadView]; 57 | self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; 58 | self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 59 | self.tableView.dataSource = self; 60 | self.tableView.delegate = self; 61 | [self.view addSubview:self.tableView]; 62 | } 63 | 64 | #pragma mark - Table View Data Source 65 | 66 | enum { 67 | ButtonsRow, 68 | SegmentedControlRow, 69 | ContainerRow, 70 | SliderRow, 71 | NumberOfRows, 72 | }; 73 | 74 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 75 | { 76 | return NumberOfRows; 77 | } 78 | 79 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 80 | { 81 | static NSString *reuseIdentifier = @"cell"; 82 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 83 | if (cell == nil) 84 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; 85 | switch (indexPath.row) { 86 | case ButtonsRow: 87 | [[cell textLabel] setText:@"Buttons"]; 88 | break; 89 | case SegmentedControlRow: 90 | [[cell textLabel] setText:@"Segmented Controls"]; 91 | break; 92 | case ContainerRow: 93 | [[cell textLabel] setText:@"Container"]; 94 | break; 95 | case SliderRow: 96 | [[cell textLabel] setText:@"Sliders"]; 97 | break; 98 | default: 99 | break; 100 | } 101 | return cell; 102 | } 103 | 104 | #pragma mark - Table View Delegate 105 | 106 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 107 | { 108 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 109 | UIViewController *controller; 110 | switch (indexPath.row) { 111 | case ButtonsRow: 112 | controller = [ASButtonViewController new]; 113 | break; 114 | case SegmentedControlRow: 115 | controller = [ASSegmentedControlViewController new]; 116 | break; 117 | case ContainerRow: 118 | controller = [ASContainerViewController new]; 119 | break; 120 | case SliderRow: 121 | controller = [ASSliderViewController new]; 122 | break; 123 | default: 124 | break; 125 | } 126 | if (controller) 127 | [self.navigationController pushViewController:controller animated:YES]; 128 | } 129 | 130 | @end 131 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextView.m: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextView.m 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXTextView.h" 22 | #import "AXTextView_Internal.h" 23 | 24 | @implementation AXTextView 25 | 26 | #pragma mark - 27 | 28 | - (NSAttributedString *)content 29 | { 30 | // Rippped from wikipedia page on screen readers 31 | NSString *content = @"A screen reader is a software application that attempts to identify and interpret what is being displayed on the screen (or, more accurately, sent to standard output, whether a video monitor is present or not). This interpretation is then re-presented to the user with text-to-speech, sound icons, or a Braille output device. Screen readers are a form of assistive technology potentially useful to people who are blind, visually impaired, illiterate or learning disabled, often in combination with other assistive technology, such as screen magnifiers."; 32 | 33 | CTFontRef font = CTFontCreateWithName(CFSTR("HelveticaNeueLight"), 18, NULL); 34 | NSDictionary *attributes = nil; 35 | if (font) 36 | { 37 | attributes = [NSDictionary dictionaryWithObject:(__bridge id)font forKey:(id)kCTFontAttributeName]; 38 | CFRelease(font); 39 | } 40 | 41 | return [[NSAttributedString alloc] initWithString:content attributes:attributes]; 42 | } 43 | 44 | - (id)initWithCoder:(NSCoder *)aDecoder 45 | { 46 | self = [super initWithCoder:aDecoder]; 47 | if (self) 48 | { 49 | self.textInsets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0); 50 | self.attributedText = [self content]; 51 | } 52 | return self; 53 | } 54 | 55 | - (void)dealloc 56 | { 57 | self.frameRef = NULL; 58 | } 59 | 60 | #pragma mark - 61 | 62 | - (void)setFrameRef:(CTFrameRef)frameRef 63 | { 64 | if (frameRef != _frameRef) 65 | { 66 | if (_frameRef) 67 | { 68 | CFRelease(_frameRef); 69 | } 70 | if (frameRef) 71 | { 72 | CFRetain(frameRef); 73 | } 74 | _frameRef = frameRef; 75 | } 76 | } 77 | 78 | - (void)setAttributedText:(NSAttributedString *)attributedText 79 | { 80 | if (attributedText != _attributedText) 81 | { 82 | _attributedText = attributedText; 83 | [self ax_reset]; 84 | } 85 | } 86 | 87 | - (void)setTextInsets:(UIEdgeInsets)textInsets 88 | { 89 | _textInsets = textInsets; 90 | [self setNeedsDisplay]; 91 | } 92 | 93 | #pragma mark - 94 | 95 | - (void)ax_reset 96 | { 97 | [self setNeedsDisplay]; 98 | } 99 | 100 | - (void)layoutSubviews 101 | { 102 | [super layoutSubviews]; 103 | [self ax_reset]; 104 | } 105 | 106 | #pragma mark - Drawing 107 | 108 | - (void)drawRect:(CGRect)rect 109 | { 110 | CGContextRef context = UIGraphicsGetCurrentContext(); 111 | 112 | // Draw Text 113 | CGContextSaveGState(context); 114 | CGContextSetTextMatrix(context, CGAffineTransformIdentity); 115 | CGContextTranslateCTM(context, 0, rect.size.height); 116 | CGContextScaleCTM(context, 1.0, -1.0); 117 | [self drawTextWithFramesetter:self.attributedText context:context]; 118 | CGContextRestoreGState(context); 119 | } 120 | 121 | - (void)drawTextWithFramesetter:(NSAttributedString *)attributedString context:(CGContextRef)context 122 | { 123 | if (attributedString == nil) 124 | { 125 | return; 126 | } 127 | // Draw our text inside a frame 128 | [self makeFrameWithAttributeString:attributedString]; 129 | CTFrameDraw(self.frameRef, context); 130 | } 131 | 132 | - (void)makeFrameWithAttributeString:(NSAttributedString *)attributedString 133 | { 134 | CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attributedString); 135 | if (framesetter) 136 | { 137 | CFRange range = CFRangeMake(0, 0); 138 | CGRect rect = UIEdgeInsetsInsetRect(self.bounds, self.textInsets); 139 | UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect]; 140 | CTFrameRef frameRef = CTFramesetterCreateFrame(framesetter, range, [path CGPath], NULL); 141 | if (frameRef) 142 | { 143 | self.frameRef = frameRef; 144 | CFRelease(frameRef); 145 | CFRelease(framesetter); 146 | } 147 | } 148 | } 149 | 150 | @end 151 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASCustomizedPageSlider.m: -------------------------------------------------------------------------------- 1 | // 2 | // ASCustomizedPageSlider.m 3 | // 4 | // Created by Doug Russell 5 | // Copyright (c) 2012 Doug Russell. All rights reserved. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import "ASCustomizedPageSlider.h" 21 | 22 | // IMPORTANT: Don't actually use this class, it's just a demonstration of how to make a custom slider accessible. Use UISlider, it's much better. 23 | 24 | @interface ASCustomizedPageSlider () 25 | - (void)updateAccessibilityValue; 26 | @end 27 | 28 | @implementation ASCustomizedPageSlider 29 | 30 | static void CommonInit(ASCustomizedPageSlider *self) 31 | { 32 | self.value = 1.0f; 33 | self.minValue = 1.0f; 34 | self.maxValue = 20.0f; 35 | [self updateAccessibilityValue]; 36 | } 37 | 38 | - (id)initWithFrame:(CGRect)frame 39 | { 40 | self = [super initWithFrame:frame]; 41 | if (self) 42 | { 43 | CommonInit(self); 44 | } 45 | return self; 46 | } 47 | 48 | - (id)initWithCoder:(NSCoder *)aDecoder 49 | { 50 | self = [super initWithCoder:aDecoder]; 51 | if (self) 52 | { 53 | CommonInit(self); 54 | } 55 | return self; 56 | } 57 | 58 | - (void)setValue:(float)value 59 | { 60 | if (value < self.minValue) 61 | return; 62 | if (value > self.maxValue) 63 | return; 64 | _value = value; 65 | [self updateAccessibilityValue]; 66 | [self setNeedsDisplay]; 67 | [self sendActionsForControlEvents:UIControlEventValueChanged]; 68 | } 69 | 70 | #define HandleSize 30.0f 71 | #define HandleInset (HandleSize / 2.0f) 72 | 73 | - (CGRect)handleRect 74 | { 75 | CGSize size = self.bounds.size; 76 | CGFloat x = (size.width - HandleSize) * ((self.value - self.minValue) / (self.maxValue - self.minValue)); 77 | return CGRectMake(x, CGRectGetMidY(self.bounds) - HandleInset, HandleSize, HandleSize); 78 | } 79 | 80 | - (void)drawRect:(CGRect)rect 81 | { 82 | [[UIColor blackColor] set]; 83 | UIRectFill(rect); 84 | [[UIColor grayColor] set]; 85 | UIRectFill([self handleRect]); 86 | } 87 | 88 | - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event 89 | { 90 | BOOL beginTracking = [super beginTrackingWithTouch:touch withEvent:event]; 91 | if (beginTracking) 92 | { 93 | CGPoint touchLocation = [touch locationInView:self]; 94 | if ((touchLocation.x > 0.0f) || 95 | (touchLocation.x < (self.bounds.size.width - HandleSize))) 96 | { 97 | CGRect handleRect = [self handleRect]; 98 | if (!CGRectContainsPoint(handleRect, touchLocation)) 99 | beginTracking = NO; 100 | } 101 | else 102 | beginTracking = NO; 103 | } 104 | return beginTracking; 105 | } 106 | 107 | - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event 108 | { 109 | BOOL continueTracking = [super continueTrackingWithTouch:touch withEvent:event]; 110 | if (continueTracking) 111 | { 112 | CGPoint touchLocation = [touch locationInView:self]; 113 | if ((touchLocation.x > 0.0f) || 114 | (touchLocation.x < (self.bounds.size.width - HandleSize))) 115 | { 116 | self.value = ((touchLocation.x - HandleInset) / (self.bounds.size.width - HandleSize)) * (self.maxValue - self.minValue); 117 | } 118 | else 119 | continueTracking = NO; 120 | } 121 | return continueTracking; 122 | } 123 | 124 | - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event 125 | { 126 | [super endTrackingWithTouch:touch withEvent:event]; 127 | } 128 | 129 | - (void)cancelTrackingWithEvent:(UIEvent *)event 130 | { 131 | [super cancelTrackingWithEvent:event]; 132 | } 133 | 134 | #pragma mark - 135 | 136 | - (BOOL)isAccessibilityElement 137 | { 138 | return YES; 139 | } 140 | 141 | - (void)accessibilityIncrement 142 | { 143 | self.value += 1.0f; 144 | } 145 | 146 | - (void)accessibilityDecrement 147 | { 148 | self.value -= 1.0f; 149 | } 150 | 151 | - (UIAccessibilityTraits)accessibilityTraits 152 | { 153 | UIAccessibilityTraits traits = [super accessibilityTraits]; 154 | return (traits | UIAccessibilityTraitAdjustable); 155 | } 156 | 157 | - (NSString *)accessibilityLabel 158 | { 159 | return @"Page"; // Ideally this would be localized 160 | } 161 | 162 | - (void)updateAccessibilityValue 163 | { 164 | self.accessibilityValue = [NSString stringWithFormat:@"%3.0f", self.value]; 165 | } 166 | 167 | @end 168 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextContainerView.m: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextContainerView.m 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXTextContainerView.h" 22 | #import "AXTextView_Internal.h" 23 | 24 | @interface AXTextContainerView () 25 | @property (nonatomic) NSMutableArray *axTextElements; 26 | @end 27 | 28 | @implementation AXTextContainerView 29 | 30 | #pragma mark - Reset 31 | 32 | - (void)reset 33 | { 34 | [self ax_resetAccessibilityElements]; 35 | [super ax_reset]; 36 | } 37 | 38 | #pragma mark - Accessibility Elements 39 | 40 | - (void)ax_resetAccessibilityElements 41 | { 42 | self.axTextElements = nil; 43 | } 44 | 45 | - (void)ax_configureAccessibilityElements 46 | { 47 | if (!self.axTextElements) 48 | { 49 | // If we don't have a frame ref, we don't have any lines 50 | if (self.frameRef == NULL) 51 | { 52 | return; 53 | } 54 | UIWindow *window = self.window; 55 | if (window == nil) 56 | { 57 | 58 | } 59 | self.axTextElements = [NSMutableArray new]; 60 | CGRect rect = self.bounds; 61 | // Get the lines out of the current frame and the lines origins 62 | CFArrayRef lines = CTFrameGetLines(self.frameRef); 63 | CFIndex count = CFArrayGetCount(lines); 64 | CGPoint *origins = malloc(sizeof(CGPoint) * count); 65 | CTFrameGetLineOrigins(self.frameRef, CFRangeMake(0, count), origins); 66 | UIEdgeInsets textInsets = self.textInsets; 67 | for (CFIndex i = 0; i < count; i++) 68 | { 69 | CTLineRef line = CFArrayGetValueAtIndex(lines, i); 70 | // Get the lines substring 71 | CFRange cfRange = CTLineGetStringRange(line); 72 | NSRange range = NSMakeRange(cfRange.location, cfRange.length); 73 | NSString *string = [self.attributedText.string substringWithRange:range]; 74 | // Get the lines geometry 75 | CGFloat ascent, descent, leading; 76 | double width = CTLineGetTypographicBounds(line, &ascent, &descent, &leading); 77 | CGFloat height = ascent + descent + leading; 78 | // Skips lines that are just line breaks 79 | if (string.length == 1 && [string isEqualToString:@"\n"]) 80 | { 81 | continue; 82 | } 83 | // Adjust the lines origin for top left origin instead of bottotm left origin 84 | CGPoint adjustedOrigin = origins[i]; 85 | adjustedOrigin.y = rect.size.height - adjustedOrigin.y - height - textInsets.top; 86 | adjustedOrigin.x += textInsets.left; 87 | CGRect frame = (CGRect){ adjustedOrigin, (CGSize) { (CGFloat)width, height} }; 88 | frame = [self convertRect:frame toView:window]; 89 | frame = [window convertRect:frame toWindow:nil]; 90 | // Build accessibility element 91 | UIAccessibilityElement *accElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; 92 | accElement.isAccessibilityElement = YES; 93 | accElement.accessibilityLabel = string; 94 | accElement.accessibilityFrame = frame; 95 | // Traits is a bitmask so don't for get to | in the default traits 96 | accElement.accessibilityTraits = accElement.accessibilityTraits | UIAccessibilityTraitStaticText; 97 | [self.axTextElements addObject:accElement]; 98 | } 99 | free(origins); 100 | } 101 | } 102 | 103 | #pragma mark - Accessibility Container 104 | 105 | /* 106 | Return YES if the receiver should be exposed as an accessibility element. 107 | default == NO 108 | default on UIKit controls == YES 109 | Setting the property to YES will cause the receiver to be visible to assistive applications. 110 | */ 111 | - (BOOL)isAccessibilityElement 112 | { 113 | // Containers are not themselves accessibility elements 114 | return NO; 115 | } 116 | 117 | /* 118 | Returns the number of accessibility elements in the container. 119 | */ 120 | - (NSInteger)accessibilityElementCount 121 | { 122 | [self ax_configureAccessibilityElements]; 123 | return (NSInteger)[self.axTextElements count]; 124 | } 125 | 126 | /* 127 | Returns the accessibility element in order, based on index. 128 | default == nil 129 | */ 130 | - (id)accessibilityElementAtIndex:(NSInteger)index 131 | { 132 | [self ax_configureAccessibilityElements]; 133 | return [self.axTextElements objectAtIndex:index]; 134 | } 135 | 136 | /* 137 | Returns the ordered index for an accessibility element 138 | default == NSNotFound 139 | */ 140 | - (NSInteger)indexOfAccessibilityElement:(id)element 141 | { 142 | [self ax_configureAccessibilityElements]; 143 | return [self.axTextElements indexOfObject:element]; 144 | } 145 | 146 | @end 147 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXPagedViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AXPagedViewController.m 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXPagedViewController.h" 22 | #import "AXTextViewController.h" 23 | 24 | @interface AXPagedViewController () 25 | @property (nonatomic) UIPageViewController *pageViewController; 26 | @property (nonatomic) NSArray *viewControllers; 27 | @end 28 | 29 | @implementation AXPagedViewController 30 | 31 | #pragma mark - Segue 32 | 33 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 34 | { 35 | [super prepareForSegue:segue sender:sender]; 36 | 37 | if ([segue.identifier isEqualToString:@"PageViewControllerSegue"]) 38 | { 39 | self.pageViewController = segue.destinationViewController; 40 | 41 | UIStoryboard *storyboard = self.storyboard; 42 | // Store our view controller pages 43 | self.viewControllers = 44 | @[ 45 | [storyboard instantiateViewControllerWithIdentifier:@"ReadingContentTextViewController"], 46 | [storyboard instantiateViewControllerWithIdentifier:@"ReadingContentTextViewController"], 47 | [storyboard instantiateViewControllerWithIdentifier:@"ReadingContentTextViewController"], 48 | ]; 49 | [[self.viewControllers lastObject] setIsLastPage:YES]; 50 | 51 | self.pageViewController.dataSource = self; 52 | self.pageViewController.delegate = self; 53 | 54 | self.pageViewController.view.backgroundColor = [UIColor lightGrayColor]; 55 | 56 | [self.pageViewController setViewControllers:@[self.viewControllers[0]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL]; 57 | } 58 | } 59 | 60 | #pragma mark - UIPageViewControllerDataSource 61 | 62 | - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 63 | { 64 | UIViewController *viewControllerBefore = nil; 65 | NSUInteger index = [self.viewControllers indexOfObject:viewController]; 66 | if (index != NSNotFound) 67 | { 68 | index--; 69 | if (index != NSUIntegerMax) 70 | { 71 | viewControllerBefore = self.viewControllers[index]; 72 | } 73 | } 74 | return viewControllerBefore; 75 | } 76 | 77 | - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 78 | { 79 | UIViewController *viewControllerAfter = nil; 80 | NSUInteger index = [self.viewControllers indexOfObject:viewController]; 81 | if (index != NSNotFound) 82 | { 83 | index++; 84 | if (index != [self.viewControllers count]) 85 | { 86 | viewControllerAfter = self.viewControllers[index]; 87 | } 88 | } 89 | return viewControllerAfter; 90 | } 91 | 92 | - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController 93 | { 94 | return (NSInteger)[self.viewControllers count]; 95 | } 96 | 97 | - (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController 98 | { 99 | if (self.viewControllers && [self.pageViewController.viewControllers count]) 100 | { 101 | NSUInteger index = [self.viewControllers indexOfObject:self.pageViewController.viewControllers[0]]; 102 | if (index != NSNotFound) 103 | { 104 | return index; 105 | } 106 | } 107 | return 0; 108 | } 109 | 110 | - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction 111 | { 112 | BOOL handled = NO; 113 | if (self.viewControllers && [self.pageViewController.viewControllers count]) 114 | { 115 | NSUInteger index = [self.viewControllers indexOfObject:self.pageViewController.viewControllers[0]]; 116 | if (index != NSNotFound) 117 | { 118 | UIPageViewControllerNavigationDirection navDirection; 119 | switch (direction) { 120 | case UIAccessibilityScrollDirectionLeft: 121 | case UIAccessibilityScrollDirectionNext: 122 | index++; 123 | if (index != [self.viewControllers count]) 124 | { 125 | handled = YES; 126 | } 127 | navDirection = UIPageViewControllerNavigationDirectionForward; 128 | break; 129 | case UIAccessibilityScrollDirectionRight: 130 | case UIAccessibilityScrollDirectionPrevious: 131 | index--; 132 | if (index != NSUIntegerMax) 133 | { 134 | handled = YES; 135 | } 136 | navDirection = UIPageViewControllerNavigationDirectionReverse; 137 | break; 138 | default: 139 | break; 140 | } 141 | if (handled) 142 | { 143 | [self.pageViewController setViewControllers:@[self.viewControllers[index]] direction:navDirection animated:YES completion:^(BOOL finished) { 144 | UIAccessibilityPostNotification(UIAccessibilityPageScrolledNotification, nil); 145 | }]; 146 | } 147 | } 148 | } 149 | return handled; 150 | } 151 | 152 | @end 153 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/AXTextReadingContentView.m: -------------------------------------------------------------------------------- 1 | // 2 | // AXTextReadingContentView.m 3 | // ReadingContent 4 | // 5 | // Created by Doug Russell on 9/12/13. 6 | // Copyright (c) 2013 Doug Russell. All rights reserved. 7 | // 8 | // Licensed under the Apache License, Version 2.0 (the "License"); 9 | // you may not use this file except in compliance with the License. 10 | // You may obtain a copy of the License at 11 | // 12 | // http://www.apache.org/licenses/LICENSE-2.0 13 | // 14 | // Unless required by applicable law or agreed to in writing, software 15 | // distributed under the License is distributed on an "AS IS" BASIS, 16 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | // See the License for the specific language governing permissions and 18 | // limitations under the License. 19 | // 20 | 21 | #import "AXTextReadingContentView.h" 22 | #import "AXTextView_Internal.h" 23 | 24 | @interface AXTextReadingContentView () 25 | @property (nonatomic) NSMutableArray *axTextElements; 26 | @end 27 | 28 | @implementation AXTextReadingContentView 29 | 30 | #pragma mark - Reset 31 | 32 | - (void)reset 33 | { 34 | [self ax_resetAccessibilityElements]; 35 | [super ax_reset]; 36 | } 37 | 38 | #pragma mark - Accessibility Elements 39 | 40 | - (void)ax_resetAccessibilityElements 41 | { 42 | self.axTextElements = nil; 43 | } 44 | 45 | - (void)ax_configureAccessibilityElements 46 | { 47 | if (!self.axTextElements) 48 | { 49 | // If we don't have a frame ref, we don't have any lines 50 | if (self.frameRef == NULL) 51 | { 52 | return; 53 | } 54 | self.axTextElements = [NSMutableArray new]; 55 | CGRect rect = self.bounds; 56 | // Get the lines out of the current frame and the lines origins 57 | CFArrayRef lines = CTFrameGetLines(self.frameRef); 58 | CFIndex count = CFArrayGetCount(lines); 59 | CGPoint *origins = malloc(sizeof(CGPoint) * count); 60 | CTFrameGetLineOrigins(self.frameRef, CFRangeMake(0, count), origins); 61 | UIEdgeInsets textInsets = self.textInsets; 62 | for (CFIndex i = 0; i < count; i++) 63 | { 64 | CTLineRef line = CFArrayGetValueAtIndex(lines, i); 65 | // Get the lines substring 66 | CFRange cfRange = CTLineGetStringRange(line); 67 | NSRange range = NSMakeRange(cfRange.location, cfRange.length); 68 | NSString *string = [self.attributedText.string substringWithRange:range]; 69 | // Get the lines geometry 70 | CGFloat ascent, descent, leading; 71 | double width = CTLineGetTypographicBounds(line, &ascent, &descent, &leading); 72 | CGFloat height = ascent + descent + leading; 73 | // Skips lines that are just line breaks 74 | if (string.length == 1 && [string isEqualToString:@"\n"]) 75 | { 76 | continue; 77 | } 78 | // Adjust the lines origin for top left origin instead of bottotm left origin 79 | CGPoint adjustedOrigin = origins[i]; 80 | adjustedOrigin.y = rect.size.height - adjustedOrigin.y - height - textInsets.top; 81 | adjustedOrigin.x += textInsets.left; 82 | CGRect frame = (CGRect){ adjustedOrigin, (CGSize) { (CGFloat)width, height} }; 83 | // Build accessibility element 84 | UIAccessibilityElement *accElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self]; 85 | accElement.isAccessibilityElement = YES; 86 | accElement.accessibilityLabel = string; 87 | accElement.accessibilityFrame = frame; 88 | // Traits is a bitmask so don't for get to | in the default traits 89 | accElement.accessibilityTraits = accElement.accessibilityTraits | UIAccessibilityTraitStaticText; 90 | [self.axTextElements addObject:accElement]; 91 | } 92 | free(origins); 93 | } 94 | } 95 | 96 | #pragma mark - Accessibility Reading Content 97 | 98 | - (BOOL)isAccessibilityElement 99 | { 100 | return YES; 101 | } 102 | 103 | - (UIAccessibilityTraits)accessibilityTraits 104 | { 105 | UIAccessibilityTraits traits = [super accessibilityTraits]; 106 | if (self.causesPageTurn) 107 | { 108 | traits |= UIAccessibilityTraitCausesPageTurn; 109 | } 110 | return traits; 111 | } 112 | 113 | // Returns the line number given a point in the view's coordinate space. 114 | - (NSInteger)accessibilityLineNumberForPoint:(CGPoint)point 115 | { 116 | [self ax_configureAccessibilityElements]; 117 | for (NSUInteger i = 0; i < [self.axTextElements count]; i++) 118 | { 119 | UIAccessibilityElement *axElement = self.axTextElements[i]; 120 | if (CGRectContainsPoint(axElement.accessibilityFrame, point)) 121 | { 122 | return i; 123 | } 124 | } 125 | return NSNotFound; 126 | } 127 | 128 | // Returns the content associated with a line number as a string. 129 | - (NSString *)accessibilityContentForLineNumber:(NSInteger)lineNumber 130 | { 131 | [self ax_configureAccessibilityElements]; 132 | return [self.axTextElements[lineNumber] accessibilityLabel]; 133 | } 134 | 135 | // Returns the on-screen rectangle for a line number. 136 | - (CGRect)accessibilityFrameForLineNumber:(NSInteger)lineNumber 137 | { 138 | [self ax_configureAccessibilityElements]; 139 | CGRect frame = [self.axTextElements[lineNumber] accessibilityFrame]; 140 | UIWindow *window = self.window; 141 | frame = [self convertRect:frame toView:window]; 142 | if (window) 143 | { 144 | frame = [window convertRect:frame toWindow:nil]; 145 | } 146 | return frame; 147 | } 148 | 149 | // Returns a string representing the text displayed on the current page. 150 | - (NSString *)accessibilityPageContent 151 | { 152 | [self ax_configureAccessibilityElements]; 153 | return self.attributedText.string; 154 | } 155 | 156 | @end 157 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 9132E2EF17E2C7F900E7FCF3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9132E2EE17E2C7F900E7FCF3 /* Foundation.framework */; }; 11 | 9132E2F117E2C7F900E7FCF3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9132E2F017E2C7F900E7FCF3 /* CoreGraphics.framework */; }; 12 | 9132E2F317E2C7F900E7FCF3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9132E2F217E2C7F900E7FCF3 /* UIKit.framework */; }; 13 | 9132E2F917E2C7F900E7FCF3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9132E2F717E2C7F900E7FCF3 /* InfoPlist.strings */; }; 14 | 9132E2FB17E2C7F900E7FCF3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9132E2FA17E2C7F900E7FCF3 /* main.m */; }; 15 | 9132E2FF17E2C7F900E7FCF3 /* AXAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9132E2FE17E2C7F900E7FCF3 /* AXAppDelegate.m */; }; 16 | 9132E30117E2C7F900E7FCF3 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9132E30017E2C7F900E7FCF3 /* Images.xcassets */; }; 17 | 9132E31F17E2C83100E7FCF3 /* AXTextViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9132E31E17E2C83100E7FCF3 /* AXTextViewController.m */; }; 18 | 9132E32217E2C86000E7FCF3 /* AXTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9132E32117E2C86000E7FCF3 /* AXTextView.m */; }; 19 | 9132E32517E2C92F00E7FCF3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9132E32417E2C92F00E7FCF3 /* Main.storyboard */; }; 20 | 9132E32C17E2D9CE00E7FCF3 /* AXTextReadingContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9132E32B17E2D9CE00E7FCF3 /* AXTextReadingContentView.m */; }; 21 | 9132E32F17E2DBE700E7FCF3 /* AXTextContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9132E32E17E2DBE700E7FCF3 /* AXTextContainerView.m */; }; 22 | 91E9CD3617E2DD5400B90BFB /* AXPagedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 91E9CD3517E2DD5400B90BFB /* AXPagedViewController.m */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXFileReference section */ 26 | 9132E2EB17E2C7F900E7FCF3 /* ReadingContent.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReadingContent.app; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | 9132E2EE17E2C7F900E7FCF3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 28 | 9132E2F017E2C7F900E7FCF3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 29 | 9132E2F217E2C7F900E7FCF3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 30 | 9132E2F617E2C7F900E7FCF3 /* ReadingContent-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ReadingContent-Info.plist"; sourceTree = ""; }; 31 | 9132E2F817E2C7F900E7FCF3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 32 | 9132E2FA17E2C7F900E7FCF3 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 33 | 9132E2FC17E2C7F900E7FCF3 /* ReadingContent-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReadingContent-Prefix.pch"; sourceTree = ""; }; 34 | 9132E2FD17E2C7F900E7FCF3 /* AXAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AXAppDelegate.h; sourceTree = ""; }; 35 | 9132E2FE17E2C7F900E7FCF3 /* AXAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AXAppDelegate.m; sourceTree = ""; }; 36 | 9132E30017E2C7F900E7FCF3 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 37 | 9132E30717E2C7F900E7FCF3 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 38 | 9132E31D17E2C83100E7FCF3 /* AXTextViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AXTextViewController.h; sourceTree = ""; }; 39 | 9132E31E17E2C83100E7FCF3 /* AXTextViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AXTextViewController.m; sourceTree = ""; }; 40 | 9132E32017E2C86000E7FCF3 /* AXTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AXTextView.h; sourceTree = ""; }; 41 | 9132E32117E2C86000E7FCF3 /* AXTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AXTextView.m; sourceTree = ""; }; 42 | 9132E32417E2C92F00E7FCF3 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 43 | 9132E32917E2CF0400E7FCF3 /* AXTextView_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AXTextView_Internal.h; sourceTree = ""; }; 44 | 9132E32A17E2D9CE00E7FCF3 /* AXTextReadingContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AXTextReadingContentView.h; sourceTree = ""; }; 45 | 9132E32B17E2D9CE00E7FCF3 /* AXTextReadingContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AXTextReadingContentView.m; sourceTree = ""; }; 46 | 9132E32D17E2DBE700E7FCF3 /* AXTextContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AXTextContainerView.h; sourceTree = ""; }; 47 | 9132E32E17E2DBE700E7FCF3 /* AXTextContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AXTextContainerView.m; sourceTree = ""; }; 48 | 91E9CD3417E2DD5400B90BFB /* AXPagedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AXPagedViewController.h; sourceTree = ""; }; 49 | 91E9CD3517E2DD5400B90BFB /* AXPagedViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AXPagedViewController.m; sourceTree = ""; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | 9132E2E817E2C7F900E7FCF3 /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | 9132E2F117E2C7F900E7FCF3 /* CoreGraphics.framework in Frameworks */, 58 | 9132E2F317E2C7F900E7FCF3 /* UIKit.framework in Frameworks */, 59 | 9132E2EF17E2C7F900E7FCF3 /* Foundation.framework in Frameworks */, 60 | ); 61 | runOnlyForDeploymentPostprocessing = 0; 62 | }; 63 | /* End PBXFrameworksBuildPhase section */ 64 | 65 | /* Begin PBXGroup section */ 66 | 9132E2E217E2C7F900E7FCF3 = { 67 | isa = PBXGroup; 68 | children = ( 69 | 9132E2F417E2C7F900E7FCF3 /* ReadingContent */, 70 | 9132E2ED17E2C7F900E7FCF3 /* Frameworks */, 71 | 9132E2EC17E2C7F900E7FCF3 /* Products */, 72 | ); 73 | sourceTree = ""; 74 | }; 75 | 9132E2EC17E2C7F900E7FCF3 /* Products */ = { 76 | isa = PBXGroup; 77 | children = ( 78 | 9132E2EB17E2C7F900E7FCF3 /* ReadingContent.app */, 79 | ); 80 | name = Products; 81 | sourceTree = ""; 82 | }; 83 | 9132E2ED17E2C7F900E7FCF3 /* Frameworks */ = { 84 | isa = PBXGroup; 85 | children = ( 86 | 9132E2EE17E2C7F900E7FCF3 /* Foundation.framework */, 87 | 9132E2F017E2C7F900E7FCF3 /* CoreGraphics.framework */, 88 | 9132E2F217E2C7F900E7FCF3 /* UIKit.framework */, 89 | 9132E30717E2C7F900E7FCF3 /* XCTest.framework */, 90 | ); 91 | name = Frameworks; 92 | sourceTree = ""; 93 | }; 94 | 9132E2F417E2C7F900E7FCF3 /* ReadingContent */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 9132E2FD17E2C7F900E7FCF3 /* AXAppDelegate.h */, 98 | 9132E2FE17E2C7F900E7FCF3 /* AXAppDelegate.m */, 99 | 9132E32417E2C92F00E7FCF3 /* Main.storyboard */, 100 | 9132E32317E2C8D400E7FCF3 /* Custom Text View */, 101 | 91E9CD3417E2DD5400B90BFB /* AXPagedViewController.h */, 102 | 91E9CD3517E2DD5400B90BFB /* AXPagedViewController.m */, 103 | 9132E30017E2C7F900E7FCF3 /* Images.xcassets */, 104 | 9132E2F517E2C7F900E7FCF3 /* Supporting Files */, 105 | ); 106 | path = ReadingContent; 107 | sourceTree = ""; 108 | }; 109 | 9132E2F517E2C7F900E7FCF3 /* Supporting Files */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 9132E2F617E2C7F900E7FCF3 /* ReadingContent-Info.plist */, 113 | 9132E2F717E2C7F900E7FCF3 /* InfoPlist.strings */, 114 | 9132E2FA17E2C7F900E7FCF3 /* main.m */, 115 | 9132E2FC17E2C7F900E7FCF3 /* ReadingContent-Prefix.pch */, 116 | ); 117 | name = "Supporting Files"; 118 | sourceTree = ""; 119 | }; 120 | 9132E32317E2C8D400E7FCF3 /* Custom Text View */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | 9132E31D17E2C83100E7FCF3 /* AXTextViewController.h */, 124 | 9132E31E17E2C83100E7FCF3 /* AXTextViewController.m */, 125 | 9132E32017E2C86000E7FCF3 /* AXTextView.h */, 126 | 9132E32117E2C86000E7FCF3 /* AXTextView.m */, 127 | 9132E32917E2CF0400E7FCF3 /* AXTextView_Internal.h */, 128 | 9132E32D17E2DBE700E7FCF3 /* AXTextContainerView.h */, 129 | 9132E32E17E2DBE700E7FCF3 /* AXTextContainerView.m */, 130 | 9132E32A17E2D9CE00E7FCF3 /* AXTextReadingContentView.h */, 131 | 9132E32B17E2D9CE00E7FCF3 /* AXTextReadingContentView.m */, 132 | ); 133 | name = "Custom Text View"; 134 | sourceTree = ""; 135 | }; 136 | /* End PBXGroup section */ 137 | 138 | /* Begin PBXNativeTarget section */ 139 | 9132E2EA17E2C7F900E7FCF3 /* ReadingContent */ = { 140 | isa = PBXNativeTarget; 141 | buildConfigurationList = 9132E31717E2C7F900E7FCF3 /* Build configuration list for PBXNativeTarget "ReadingContent" */; 142 | buildPhases = ( 143 | 9132E2E717E2C7F900E7FCF3 /* Sources */, 144 | 9132E2E817E2C7F900E7FCF3 /* Frameworks */, 145 | 9132E2E917E2C7F900E7FCF3 /* Resources */, 146 | ); 147 | buildRules = ( 148 | ); 149 | dependencies = ( 150 | ); 151 | name = ReadingContent; 152 | productName = ReadingContent; 153 | productReference = 9132E2EB17E2C7F900E7FCF3 /* ReadingContent.app */; 154 | productType = "com.apple.product-type.application"; 155 | }; 156 | /* End PBXNativeTarget section */ 157 | 158 | /* Begin PBXProject section */ 159 | 9132E2E317E2C7F900E7FCF3 /* Project object */ = { 160 | isa = PBXProject; 161 | attributes = { 162 | CLASSPREFIX = AX; 163 | LastUpgradeCheck = 0500; 164 | ORGANIZATIONNAME = "Apple Inc"; 165 | }; 166 | buildConfigurationList = 9132E2E617E2C7F900E7FCF3 /* Build configuration list for PBXProject "ReadingContent" */; 167 | compatibilityVersion = "Xcode 3.2"; 168 | developmentRegion = English; 169 | hasScannedForEncodings = 0; 170 | knownRegions = ( 171 | en, 172 | ); 173 | mainGroup = 9132E2E217E2C7F900E7FCF3; 174 | productRefGroup = 9132E2EC17E2C7F900E7FCF3 /* Products */; 175 | projectDirPath = ""; 176 | projectRoot = ""; 177 | targets = ( 178 | 9132E2EA17E2C7F900E7FCF3 /* ReadingContent */, 179 | ); 180 | }; 181 | /* End PBXProject section */ 182 | 183 | /* Begin PBXResourcesBuildPhase section */ 184 | 9132E2E917E2C7F900E7FCF3 /* Resources */ = { 185 | isa = PBXResourcesBuildPhase; 186 | buildActionMask = 2147483647; 187 | files = ( 188 | 9132E2F917E2C7F900E7FCF3 /* InfoPlist.strings in Resources */, 189 | 9132E30117E2C7F900E7FCF3 /* Images.xcassets in Resources */, 190 | 9132E32517E2C92F00E7FCF3 /* Main.storyboard in Resources */, 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | }; 194 | /* End PBXResourcesBuildPhase section */ 195 | 196 | /* Begin PBXSourcesBuildPhase section */ 197 | 9132E2E717E2C7F900E7FCF3 /* Sources */ = { 198 | isa = PBXSourcesBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | 9132E32F17E2DBE700E7FCF3 /* AXTextContainerView.m in Sources */, 202 | 9132E32217E2C86000E7FCF3 /* AXTextView.m in Sources */, 203 | 9132E31F17E2C83100E7FCF3 /* AXTextViewController.m in Sources */, 204 | 9132E32C17E2D9CE00E7FCF3 /* AXTextReadingContentView.m in Sources */, 205 | 9132E2FB17E2C7F900E7FCF3 /* main.m in Sources */, 206 | 91E9CD3617E2DD5400B90BFB /* AXPagedViewController.m in Sources */, 207 | 9132E2FF17E2C7F900E7FCF3 /* AXAppDelegate.m in Sources */, 208 | ); 209 | runOnlyForDeploymentPostprocessing = 0; 210 | }; 211 | /* End PBXSourcesBuildPhase section */ 212 | 213 | /* Begin PBXVariantGroup section */ 214 | 9132E2F717E2C7F900E7FCF3 /* InfoPlist.strings */ = { 215 | isa = PBXVariantGroup; 216 | children = ( 217 | 9132E2F817E2C7F900E7FCF3 /* en */, 218 | ); 219 | name = InfoPlist.strings; 220 | sourceTree = ""; 221 | }; 222 | /* End PBXVariantGroup section */ 223 | 224 | /* Begin XCBuildConfiguration section */ 225 | 9132E31517E2C7F900E7FCF3 /* Debug */ = { 226 | isa = XCBuildConfiguration; 227 | buildSettings = { 228 | ALWAYS_SEARCH_USER_PATHS = NO; 229 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 230 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 231 | CLANG_CXX_LIBRARY = "libc++"; 232 | CLANG_ENABLE_MODULES = YES; 233 | CLANG_ENABLE_OBJC_ARC = YES; 234 | CLANG_WARN_BOOL_CONVERSION = YES; 235 | CLANG_WARN_CONSTANT_CONVERSION = YES; 236 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 237 | CLANG_WARN_EMPTY_BODY = YES; 238 | CLANG_WARN_ENUM_CONVERSION = YES; 239 | CLANG_WARN_INT_CONVERSION = YES; 240 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 241 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 242 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 243 | COPY_PHASE_STRIP = NO; 244 | GCC_C_LANGUAGE_STANDARD = gnu99; 245 | GCC_DYNAMIC_NO_PIC = NO; 246 | GCC_OPTIMIZATION_LEVEL = 0; 247 | GCC_PREPROCESSOR_DEFINITIONS = ( 248 | "DEBUG=1", 249 | "$(inherited)", 250 | ); 251 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 252 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 253 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 254 | GCC_WARN_UNDECLARED_SELECTOR = YES; 255 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 256 | GCC_WARN_UNUSED_FUNCTION = YES; 257 | GCC_WARN_UNUSED_VARIABLE = YES; 258 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 259 | ONLY_ACTIVE_ARCH = YES; 260 | SDKROOT = iphoneos; 261 | }; 262 | name = Debug; 263 | }; 264 | 9132E31617E2C7F900E7FCF3 /* Release */ = { 265 | isa = XCBuildConfiguration; 266 | buildSettings = { 267 | ALWAYS_SEARCH_USER_PATHS = NO; 268 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 269 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 270 | CLANG_CXX_LIBRARY = "libc++"; 271 | CLANG_ENABLE_MODULES = YES; 272 | CLANG_ENABLE_OBJC_ARC = YES; 273 | CLANG_WARN_BOOL_CONVERSION = YES; 274 | CLANG_WARN_CONSTANT_CONVERSION = YES; 275 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 276 | CLANG_WARN_EMPTY_BODY = YES; 277 | CLANG_WARN_ENUM_CONVERSION = YES; 278 | CLANG_WARN_INT_CONVERSION = YES; 279 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 280 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 281 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 282 | COPY_PHASE_STRIP = YES; 283 | ENABLE_NS_ASSERTIONS = NO; 284 | GCC_C_LANGUAGE_STANDARD = gnu99; 285 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 286 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 287 | GCC_WARN_UNDECLARED_SELECTOR = YES; 288 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 289 | GCC_WARN_UNUSED_FUNCTION = YES; 290 | GCC_WARN_UNUSED_VARIABLE = YES; 291 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 292 | SDKROOT = iphoneos; 293 | VALIDATE_PRODUCT = YES; 294 | }; 295 | name = Release; 296 | }; 297 | 9132E31817E2C7F900E7FCF3 /* Debug */ = { 298 | isa = XCBuildConfiguration; 299 | buildSettings = { 300 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 301 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 302 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 303 | GCC_PREFIX_HEADER = "ReadingContent/ReadingContent-Prefix.pch"; 304 | INFOPLIST_FILE = "ReadingContent/ReadingContent-Info.plist"; 305 | PRODUCT_NAME = "$(TARGET_NAME)"; 306 | WRAPPER_EXTENSION = app; 307 | }; 308 | name = Debug; 309 | }; 310 | 9132E31917E2C7F900E7FCF3 /* Release */ = { 311 | isa = XCBuildConfiguration; 312 | buildSettings = { 313 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 314 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 315 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 316 | GCC_PREFIX_HEADER = "ReadingContent/ReadingContent-Prefix.pch"; 317 | INFOPLIST_FILE = "ReadingContent/ReadingContent-Info.plist"; 318 | PRODUCT_NAME = "$(TARGET_NAME)"; 319 | WRAPPER_EXTENSION = app; 320 | }; 321 | name = Release; 322 | }; 323 | /* End XCBuildConfiguration section */ 324 | 325 | /* Begin XCConfigurationList section */ 326 | 9132E2E617E2C7F900E7FCF3 /* Build configuration list for PBXProject "ReadingContent" */ = { 327 | isa = XCConfigurationList; 328 | buildConfigurations = ( 329 | 9132E31517E2C7F900E7FCF3 /* Debug */, 330 | 9132E31617E2C7F900E7FCF3 /* Release */, 331 | ); 332 | defaultConfigurationIsVisible = 0; 333 | defaultConfigurationName = Release; 334 | }; 335 | 9132E31717E2C7F900E7FCF3 /* Build configuration list for PBXNativeTarget "ReadingContent" */ = { 336 | isa = XCConfigurationList; 337 | buildConfigurations = ( 338 | 9132E31817E2C7F900E7FCF3 /* Debug */, 339 | 9132E31917E2C7F900E7FCF3 /* Release */, 340 | ); 341 | defaultConfigurationIsVisible = 0; 342 | defaultConfigurationName = Release; 343 | }; 344 | /* End XCConfigurationList section */ 345 | }; 346 | rootObject = 9132E2E317E2C7F900E7FCF3 /* Project object */; 347 | } 348 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSliderViewController~ipad.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1296 5 | 11D50 6 | 2182 7 | 1138.32 8 | 568.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1181 12 | 13 | 14 | IBUISlider 15 | IBUIView 16 | IBUILabel 17 | IBProxyObject 18 | 19 | 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | PluginDependencyRecalculationVersion 24 | 25 | 26 | 27 | 28 | IBFilesOwner 29 | IBIPadFramework 30 | 31 | 32 | IBFirstResponder 33 | IBIPadFramework 34 | 35 | 36 | 37 | 292 38 | 39 | 40 | 41 | 292 42 | {{18, 101}, {732, 23}} 43 | 44 | 45 | 46 | _NS:9 47 | NO 48 | IBIPadFramework 49 | 0 50 | 0 51 | 1 52 | 1 53 | 20 54 | 55 | 56 | 57 | 292 58 | {{18, 194}, {732, 23}} 59 | 60 | 61 | 62 | _NS:9 63 | NO 64 | 65 | 66 | 67 | IBIPadFramework 68 | 0 69 | 0 70 | 1 71 | 1 72 | 20 73 | 74 | 75 | 76 | 292 77 | {{20, 287}, {728, 28}} 78 | 79 | 80 | 81 | _NS:9 82 | 83 | 3 84 | MQA 85 | 86 | 2 87 | 88 | 89 | IBIPadFramework 90 | 91 | 92 | 93 | 292 94 | {{20, 58}, {728, 21}} 95 | 96 | 97 | 98 | _NS:9 99 | NO 100 | YES 101 | 7 102 | NO 103 | IBIPadFramework 104 | Example of UISlider with no special configuration 105 | 106 | 1 107 | MCAwIDAAA 108 | 109 | 110 | 0 111 | 10 112 | 1 113 | 114 | 1 115 | 17 116 | 117 | 118 | Helvetica 119 | 17 120 | 16 121 | 122 | 123 | 124 | 125 | 292 126 | {{20, 150}, {728, 21}} 127 | 128 | 129 | 130 | _NS:9 131 | NO 132 | YES 133 | 7 134 | NO 135 | IBIPadFramework 136 | Example of UISlider subclass, configured to report page number 137 | 138 | 139 | 0 140 | 10 141 | 1 142 | 143 | 144 | 145 | 146 | 147 | 292 148 | {{8, 246}, {753, 21}} 149 | 150 | 151 | 152 | _NS:9 153 | NO 154 | YES 155 | 7 156 | NO 157 | IBIPadFramework 158 | Example of custom UIControl subclass to make a faux UISlider, configured to report page number 159 | 160 | 161 | 0 162 | 10 163 | 1 164 | 165 | 166 | 167 | 168 | {{0, 64}, {768, 960}} 169 | 170 | 171 | 172 | _NS:9 173 | 174 | 3 175 | MQA 176 | 177 | 178 | 179 | 2 180 | 181 | 182 | NO 183 | 184 | IBIPadFramework 185 | 186 | 187 | 188 | 189 | 190 | 191 | view 192 | 193 | 194 | 195 | 5 196 | 197 | 198 | 199 | stockSlider 200 | 201 | 202 | 203 | 8 204 | 205 | 206 | 207 | pageSlider 208 | 209 | 210 | 211 | 13 212 | 213 | 214 | 215 | customPageSlider 216 | 217 | 218 | 219 | 14 220 | 221 | 222 | 223 | valueChanged: 224 | 225 | 226 | 13 227 | 228 | 10 229 | 230 | 231 | 232 | valueChanged: 233 | 234 | 235 | 13 236 | 237 | 12 238 | 239 | 240 | 241 | valueChanged: 242 | 243 | 244 | 13 245 | 246 | 11 247 | 248 | 249 | 250 | 251 | 252 | 0 253 | 254 | 255 | 256 | 257 | 258 | -1 259 | 260 | 261 | File's Owner 262 | 263 | 264 | -2 265 | 266 | 267 | 268 | 269 | 2 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 3 283 | 284 | 285 | 286 | 287 | 4 288 | 289 | 290 | 291 | 292 | 6 293 | 294 | 295 | 296 | 297 | 15 298 | 299 | 300 | 301 | 302 | 16 303 | 304 | 305 | 306 | 307 | 17 308 | 309 | 310 | 311 | 312 | 313 | 314 | ASSliderViewController 315 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 316 | UIResponder 317 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 318 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 319 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 320 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 321 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 322 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 323 | ASCustomizedPageSlider 324 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 325 | ASPageSlider 326 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 327 | 328 | 329 | 330 | 331 | 332 | 17 333 | 334 | 335 | 336 | 337 | ASCustomizedPageSlider 338 | UIControl 339 | 340 | IBProjectSource 341 | ./Classes/ASCustomizedPageSlider.h 342 | 343 | 344 | 345 | ASPageSlider 346 | UISlider 347 | 348 | IBProjectSource 349 | ./Classes/ASPageSlider.h 350 | 351 | 352 | 353 | ASSliderViewController 354 | ASViewController 355 | 356 | valueChanged: 357 | id 358 | 359 | 360 | valueChanged: 361 | 362 | valueChanged: 363 | id 364 | 365 | 366 | 367 | ASCustomizedPageSlider 368 | ASPageSlider 369 | UISlider 370 | 371 | 372 | 373 | customPageSlider 374 | ASCustomizedPageSlider 375 | 376 | 377 | pageSlider 378 | ASPageSlider 379 | 380 | 381 | stockSlider 382 | UISlider 383 | 384 | 385 | 386 | IBProjectSource 387 | ./Classes/ASSliderViewController.h 388 | 389 | 390 | 391 | ASViewController 392 | UIViewController 393 | 394 | IBProjectSource 395 | ./Classes/ASViewController.h 396 | 397 | 398 | 399 | 400 | 0 401 | IBIPadFramework 402 | 403 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 404 | 405 | 406 | YES 407 | 3 408 | 1181 409 | 410 | 411 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSliderViewController~iphone.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1296 5 | 11D50 6 | 2182 7 | 1138.32 8 | 568.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1181 12 | 13 | 14 | IBUISlider 15 | IBUIView 16 | IBUILabel 17 | IBProxyObject 18 | 19 | 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | PluginDependencyRecalculationVersion 24 | 25 | 26 | 27 | 28 | IBFilesOwner 29 | IBCocoaTouchFramework 30 | 31 | 32 | IBFirstResponder 33 | IBCocoaTouchFramework 34 | 35 | 36 | 37 | 274 38 | 39 | 40 | 41 | 290 42 | {{18, 81}, {284, 23}} 43 | 44 | 45 | 46 | _NS:9 47 | NO 48 | IBCocoaTouchFramework 49 | 0 50 | 0 51 | 1 52 | 1 53 | 20 54 | 55 | 56 | 57 | 292 58 | {{20, 20}, {280, 53}} 59 | 60 | 61 | 62 | _NS:9 63 | NO 64 | YES 65 | 7 66 | NO 67 | IBCocoaTouchFramework 68 | Example of UISlider with no special configuration 69 | 70 | 1 71 | MCAwIDAAA 72 | 73 | 74 | 0 75 | 10 76 | 3 77 | 1 78 | 79 | 1 80 | 17 81 | 82 | 83 | Helvetica 84 | 17 85 | 16 86 | 87 | NO 88 | 89 | 90 | 91 | 292 92 | {{20, 158}, {280, 53}} 93 | 94 | 95 | 96 | _NS:9 97 | NO 98 | YES 99 | 7 100 | NO 101 | IBCocoaTouchFramework 102 | Example of UISlider subclass, configured to report page number 103 | 104 | 105 | 0 106 | 10 107 | 3 108 | 1 109 | 110 | 111 | NO 112 | 113 | 114 | 115 | 292 116 | {{20, 290}, {280, 75}} 117 | 118 | 119 | 120 | _NS:9 121 | NO 122 | YES 123 | 7 124 | NO 125 | IBCocoaTouchFramework 126 | Example of custom UIControl subclass to make a faux UISlider, configured to report page number 127 | 128 | 129 | 0 130 | 10 131 | 3 132 | 1 133 | 134 | 135 | NO 136 | 137 | 138 | 139 | 298 140 | {{18, 219}, {284, 23}} 141 | 142 | 143 | 144 | _NS:9 145 | NO 146 | 147 | 148 | 149 | IBCocoaTouchFramework 150 | 0 151 | 0 152 | 1 153 | 1 154 | 20 155 | 156 | 157 | 158 | 266 159 | {{20, 373}, {280, 40}} 160 | 161 | 162 | 163 | _NS:9 164 | 165 | 3 166 | MQA 167 | 168 | 2 169 | 170 | 171 | IBCocoaTouchFramework 172 | 173 | 174 | {320, 460} 175 | 176 | 177 | 178 | _NS:9 179 | 180 | 3 181 | MQA 182 | 183 | 184 | IBCocoaTouchFramework 185 | 186 | 187 | 188 | 189 | 190 | 191 | view 192 | 193 | 194 | 195 | 3 196 | 197 | 198 | 199 | stockSlider 200 | 201 | 202 | 203 | 7 204 | 205 | 206 | 207 | pageSlider 208 | 209 | 210 | 211 | 10 212 | 213 | 214 | 215 | customPageSlider 216 | 217 | 218 | 219 | 11 220 | 221 | 222 | 223 | valueChanged: 224 | 225 | 226 | 13 227 | 228 | 14 229 | 230 | 231 | 232 | valueChanged: 233 | 234 | 235 | 13 236 | 237 | 13 238 | 239 | 240 | 241 | valueChanged: 242 | 243 | 244 | 13 245 | 246 | 12 247 | 248 | 249 | 250 | 251 | 252 | 0 253 | 254 | 255 | 256 | 257 | 258 | -1 259 | 260 | 261 | File's Owner 262 | 263 | 264 | -2 265 | 266 | 267 | 268 | 269 | 2 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 4 283 | 284 | 285 | 286 | 287 | 5 288 | 289 | 290 | 291 | 292 | 6 293 | 294 | 295 | 296 | 297 | 15 298 | 299 | 300 | 301 | 302 | 16 303 | 304 | 305 | 306 | 307 | 17 308 | 309 | 310 | 311 | 312 | 313 | 314 | ASSliderViewController 315 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 316 | UIResponder 317 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 318 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 319 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 320 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 321 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 322 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 323 | ASPageSlider 324 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 325 | ASCustomizedPageSlider 326 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 327 | 328 | 329 | 330 | 331 | 332 | 17 333 | 334 | 335 | 336 | 337 | ASCustomizedPageSlider 338 | UIControl 339 | 340 | IBProjectSource 341 | ./Classes/ASCustomizedPageSlider.h 342 | 343 | 344 | 345 | ASPageSlider 346 | UISlider 347 | 348 | IBProjectSource 349 | ./Classes/ASPageSlider.h 350 | 351 | 352 | 353 | ASSliderViewController 354 | ASViewController 355 | 356 | valueChanged: 357 | id 358 | 359 | 360 | valueChanged: 361 | 362 | valueChanged: 363 | id 364 | 365 | 366 | 367 | ASCustomizedPageSlider 368 | ASPageSlider 369 | UISlider 370 | 371 | 372 | 373 | customPageSlider 374 | ASCustomizedPageSlider 375 | 376 | 377 | pageSlider 378 | ASPageSlider 379 | 380 | 381 | stockSlider 382 | UISlider 383 | 384 | 385 | 386 | IBProjectSource 387 | ./Classes/ASSliderViewController.h 388 | 389 | 390 | 391 | ASViewController 392 | UIViewController 393 | 394 | IBProjectSource 395 | ./Classes/ASViewController.h 396 | 397 | 398 | 399 | 400 | 0 401 | IBCocoaTouchFramework 402 | 403 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 404 | 405 | 406 | YES 407 | 3 408 | 1181 409 | 410 | 411 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSegmentedControlViewController~ipad.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1296 5 | 11D50 6 | 2182 7 | 1138.32 8 | 568.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1181 12 | 13 | 14 | IBUISegmentedControl 15 | IBUIView 16 | IBUILabel 17 | IBProxyObject 18 | 19 | 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | PluginDependencyRecalculationVersion 24 | 25 | 26 | 27 | 28 | IBFilesOwner 29 | IBIPadFramework 30 | 31 | 32 | IBFirstResponder 33 | IBIPadFramework 34 | 35 | 36 | 37 | 292 38 | 39 | 40 | 41 | 292 42 | {{179, 132}, {410, 21}} 43 | 44 | 45 | 46 | _NS:9 47 | NO 48 | YES 49 | 7 50 | NO 51 | IBIPadFramework 52 | Example Of Segmented Control Using Text Segments 53 | 54 | 1 55 | MCAwIDAAA 56 | 57 | 58 | 0 59 | 10 60 | 1 61 | 62 | 1 63 | 17 64 | 65 | 66 | Helvetica 67 | 17 68 | 16 69 | 70 | 71 | 72 | 73 | 292 74 | {{281, 180}, {207, 44}} 75 | 76 | 77 | 78 | _NS:9 79 | NO 80 | IBIPadFramework 81 | 2 82 | 0 83 | 84 | First 85 | Second 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | {0, 0} 97 | {0, 0} 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 292 107 | {{172, 255}, {424, 21}} 108 | 109 | 110 | 111 | _NS:9 112 | NO 113 | YES 114 | 7 115 | NO 116 | IBIPadFramework 117 | Example Of Segmented Control Using Image Segments 118 | 119 | 120 | 0 121 | 10 122 | 123 | 124 | 125 | 126 | 127 | 292 128 | {{281, 305}, {207, 44}} 129 | 130 | 131 | 132 | _NS:9 133 | NO 134 | IBIPadFramework 135 | 2 136 | 0 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | {0, 0} 151 | {0, 0} 152 | 153 | 154 | 155 | NSImage 156 | SegmentedControlFirstTabImage copy.png 157 | 158 | 159 | NSImage 160 | SegmentedControlSecondTabImage copy.png 161 | 162 | 163 | 164 | 165 | 166 | 292 167 | {{76, 375}, {617, 21}} 168 | 169 | 170 | 171 | _NS:9 172 | NO 173 | YES 174 | 7 175 | NO 176 | IBIPadFramework 177 | Example Of Segmented Control Using Image Segments With Accessibility Labels 178 | 179 | 180 | 0 181 | 10 182 | 183 | 184 | 185 | 186 | 187 | 292 188 | {{281, 420}, {207, 44}} 189 | 190 | 191 | _NS:9 192 | NO 193 | IBIPadFramework 194 | 2 195 | 0 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | {0, 0} 210 | {0, 0} 211 | 212 | 213 | 214 | NSImage 215 | SegmentedControlFirstTabImage.png 216 | 217 | 218 | NSImage 219 | SegmentedControlSecondTabImage.png 220 | 221 | 222 | 223 | 224 | {{0, 64}, {768, 960}} 225 | 226 | 227 | 228 | _NS:9 229 | 230 | 3 231 | MQA 232 | 233 | 2 234 | 235 | 236 | 237 | 2 238 | 239 | 240 | NO 241 | 242 | IBIPadFramework 243 | 244 | 245 | 246 | 247 | 248 | 249 | view 250 | 251 | 252 | 253 | 3 254 | 255 | 256 | 257 | segmentedControlAccessibleImages 258 | 259 | 260 | 261 | 14 262 | 263 | 264 | 265 | segmentedControlText 266 | 267 | 268 | 269 | 16 270 | 271 | 272 | 273 | segmentedControlImages 274 | 275 | 276 | 277 | 18 278 | 279 | 280 | 281 | 282 | 283 | 0 284 | 285 | 286 | 287 | 288 | 289 | -1 290 | 291 | 292 | File's Owner 293 | 294 | 295 | -2 296 | 297 | 298 | 299 | 300 | 2 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 8 314 | 315 | 316 | 317 | 318 | 10 319 | 320 | 321 | 322 | 323 | 11 324 | 325 | 326 | 327 | 328 | 12 329 | 330 | 331 | 332 | 333 | 13 334 | 335 | 336 | 337 | 338 | 17 339 | 340 | 341 | 342 | 343 | 344 | 345 | ASSegmentedControlViewController 346 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 347 | UIResponder 348 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 349 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 350 | 351 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 352 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 353 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 354 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 355 | 356 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 357 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 358 | 359 | 360 | 361 | 362 | 363 | 18 364 | 365 | 366 | 367 | 368 | ASSegmentedControlViewController 369 | ASViewController 370 | 371 | UISegmentedControl 372 | UISegmentedControl 373 | UISegmentedControl 374 | 375 | 376 | 377 | segmentedControlAccessibleImages 378 | UISegmentedControl 379 | 380 | 381 | segmentedControlImages 382 | UISegmentedControl 383 | 384 | 385 | segmentedControlText 386 | UISegmentedControl 387 | 388 | 389 | 390 | IBProjectSource 391 | ./Classes/ASSegmentedControlViewController.h 392 | 393 | 394 | 395 | ASViewController 396 | UIViewController 397 | 398 | IBProjectSource 399 | ./Classes/ASViewController.h 400 | 401 | 402 | 403 | 404 | 0 405 | IBIPadFramework 406 | 407 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 408 | 409 | 410 | YES 411 | 3 412 | 413 | {60, 30} 414 | {60, 30} 415 | {60, 30} 416 | {60, 30} 417 | 418 | 1181 419 | 420 | 421 | -------------------------------------------------------------------------------- /AccessibilitySuite/AccessibilitySuite/ASSegmentedControlViewController~iphone.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1296 5 | 11D50 6 | 2182 7 | 1138.32 8 | 568.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1181 12 | 13 | 14 | IBUISegmentedControl 15 | IBUIView 16 | IBUILabel 17 | IBProxyObject 18 | 19 | 20 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 21 | 22 | 23 | PluginDependencyRecalculationVersion 24 | 25 | 26 | 27 | 28 | IBFilesOwner 29 | IBCocoaTouchFramework 30 | 31 | 32 | IBFirstResponder 33 | IBCocoaTouchFramework 34 | 35 | 36 | 37 | 292 38 | 39 | 40 | 41 | 292 42 | {{20, 20}, {280, 42}} 43 | 44 | 45 | 46 | _NS:9 47 | NO 48 | YES 49 | 7 50 | NO 51 | IBCocoaTouchFramework 52 | RXhhbXBsZSBPZiBTZWdtZW50ZWQgQ29udHJvbApVc2luZyBUZXh0IFNlZ21lbnRzA 53 | 54 | 1 55 | MCAwIDAAA 56 | 57 | 58 | 0 59 | 10 60 | 2 61 | 62 | 1 63 | 17 64 | 65 | 66 | Helvetica 67 | 17 68 | 16 69 | 70 | 71 | 72 | 73 | 292 74 | {{57, 70}, {207, 44}} 75 | 76 | 77 | 78 | _NS:9 79 | NO 80 | IBCocoaTouchFramework 81 | 2 82 | 0 83 | 84 | Left 85 | Right 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | {0, 0} 97 | {0, 0} 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 292 107 | {{20, 121}, {280, 42}} 108 | 109 | 110 | 111 | _NS:9 112 | NO 113 | YES 114 | 7 115 | NO 116 | IBCocoaTouchFramework 117 | RXhhbXBsZSBPZiBTZWdtZW50ZWQgQ29udHJvbApVc2luZyBJbWFnZSBTZWdtZW50cw 118 | 119 | 120 | 0 121 | 10 122 | 2 123 | 124 | 125 | 126 | 127 | 128 | 292 129 | {{57, 171}, {207, 44}} 130 | 131 | 132 | 133 | _NS:9 134 | NO 135 | IBCocoaTouchFramework 136 | 2 137 | 0 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | {0, 0} 152 | {0, 0} 153 | 154 | 155 | 156 | NSImage 157 | SegmentedControlFirstTabImage copy.png 158 | 159 | 160 | NSImage 161 | SegmentedControlSecondTabImage copy.png 162 | 163 | 164 | 165 | 166 | 167 | 292 168 | {{20, 222}, {280, 63}} 169 | 170 | 171 | 172 | _NS:9 173 | NO 174 | YES 175 | 7 176 | NO 177 | IBCocoaTouchFramework 178 | RXhhbXBsZSBPZiBTZWdtZW50ZWQgQ29udHJvbApVc2luZyBJbWFnZSBTZWdtZW50cyAKV2l0aCBBY2Nl 179 | c3NpYmlsaXR5IExhYmVscw 180 | 181 | 182 | 0 183 | 10 184 | 3 185 | 186 | 187 | 188 | 189 | 190 | 292 191 | {{57, 293}, {207, 44}} 192 | 193 | 194 | _NS:9 195 | NO 196 | IBCocoaTouchFramework 197 | 2 198 | 0 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | {0, 0} 213 | {0, 0} 214 | 215 | 216 | 217 | NSImage 218 | SegmentedControlFirstTabImage.png 219 | 220 | 221 | NSImage 222 | SegmentedControlSecondTabImage.png 223 | 224 | 225 | 226 | 227 | {{0, 64}, {320, 416}} 228 | 229 | 230 | 231 | _NS:9 232 | 233 | 3 234 | MQA 235 | 236 | 2 237 | 238 | 239 | 240 | 241 | NO 242 | 243 | IBCocoaTouchFramework 244 | 245 | 246 | 247 | 248 | 249 | 250 | view 251 | 252 | 253 | 254 | 3 255 | 256 | 257 | 258 | segmentedControlText 259 | 260 | 261 | 262 | 8 263 | 264 | 265 | 266 | segmentedControlImages 267 | 268 | 269 | 270 | 9 271 | 272 | 273 | 274 | segmentedControlAccessibleImages 275 | 276 | 277 | 278 | 12 279 | 280 | 281 | 282 | 283 | 284 | 0 285 | 286 | 287 | 288 | 289 | 290 | -1 291 | 292 | 293 | File's Owner 294 | 295 | 296 | -2 297 | 298 | 299 | 300 | 301 | 2 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 4 315 | 316 | 317 | 318 | 319 | 5 320 | 321 | 322 | 323 | 324 | 11 325 | 326 | 327 | 328 | 329 | 13 330 | 331 | 332 | 333 | 334 | 14 335 | 336 | 337 | 338 | 339 | 15 340 | 341 | 342 | 343 | 344 | 345 | 346 | ASSegmentedControlViewController 347 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 348 | UIResponder 349 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 350 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 351 | 352 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 353 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 354 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 355 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 356 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 357 | 358 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 359 | 360 | 361 | 362 | 363 | 364 | 365 | 15 366 | 367 | 368 | 369 | 370 | ASSegmentedControlViewController 371 | ASViewController 372 | 373 | UISegmentedControl 374 | UISegmentedControl 375 | UISegmentedControl 376 | 377 | 378 | 379 | segmentedControlAccessibleImages 380 | UISegmentedControl 381 | 382 | 383 | segmentedControlImages 384 | UISegmentedControl 385 | 386 | 387 | segmentedControlText 388 | UISegmentedControl 389 | 390 | 391 | 392 | IBProjectSource 393 | ./Classes/ASSegmentedControlViewController.h 394 | 395 | 396 | 397 | ASViewController 398 | UIViewController 399 | 400 | IBProjectSource 401 | ./Classes/ASViewController.h 402 | 403 | 404 | 405 | 406 | 0 407 | IBCocoaTouchFramework 408 | 409 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 410 | 411 | 412 | YES 413 | 3 414 | 415 | {60, 30} 416 | {60, 30} 417 | {60, 30} 418 | {60, 30} 419 | 420 | 1181 421 | 422 | 423 | -------------------------------------------------------------------------------- /AccessibilityReadingContent/ReadingContent/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | --------------------------------------------------------------------------------