Flutter iOS Embedder
FlutterSemanticsScrollView.mm
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
6 
9 
11 
12 @implementation FlutterSemanticsScrollView
13 
14 - (instancetype)initWithSemanticsObject:(SemanticsObject*)semanticsObject {
15  self = [super initWithFrame:CGRectZero];
16  if (self) {
17  _semanticsObject = semanticsObject;
18  _isDoingSystemScrolling = NO;
19  self.delegate = self;
20  }
21  return self;
22 }
23 
24 - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
25  return nil;
26 }
27 
28 // The following methods are explicitly forwarded to the wrapped SemanticsObject because the
29 // forwarding logic above doesn't apply to them since they are also implemented in the
30 // UIScrollView class, the base class.
31 
32 - (BOOL)isAccessibilityElement {
33  if (![self.semanticsObject isAccessibilityBridgeAlive]) {
34  return NO;
35  }
36 
37  if ([self.semanticsObject bridge]->isVoiceOverRunning()) {
38  return self.semanticsObject.accessibilityLabel.length > 0;
39  }
40 
41  if (self.semanticsObject.isAccessibilityElement) {
42  return YES;
43  }
44 
45  if (self.contentSize.width > self.frame.size.width ||
46  self.contentSize.height > self.frame.size.height) {
47  return YES;
48  }
49 
50  return NO;
51 }
52 
53 - (NSString*)accessibilityLabel {
54  return self.semanticsObject.accessibilityLabel;
55 }
56 
57 - (NSAttributedString*)accessibilityAttributedLabel {
58  return self.semanticsObject.accessibilityAttributedLabel;
59 }
60 
61 - (NSString*)accessibilityValue {
62  return self.semanticsObject.accessibilityValue;
63 }
64 
65 - (NSAttributedString*)accessibilityAttributedValue {
66  return self.semanticsObject.accessibilityAttributedValue;
67 }
68 
69 - (NSString*)accessibilityHint {
70  return self.semanticsObject.accessibilityHint;
71 }
72 
73 - (NSAttributedString*)accessibilityAttributedHint {
74  return self.semanticsObject.accessibilityAttributedHint;
75 }
76 
77 - (BOOL)accessibilityActivate {
78  return [self.semanticsObject accessibilityActivate];
79 }
80 
81 - (void)accessibilityIncrement {
82  [self.semanticsObject accessibilityIncrement];
83 }
84 
85 - (void)accessibilityDecrement {
86  [self.semanticsObject accessibilityDecrement];
87 }
88 
89 - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction {
90  return [self.semanticsObject accessibilityScroll:direction];
91 }
92 
93 - (BOOL)accessibilityPerformEscape {
94  return [self.semanticsObject accessibilityPerformEscape];
95 }
96 
97 - (void)accessibilityElementDidBecomeFocused {
98  [self.semanticsObject accessibilityElementDidBecomeFocused];
99 }
100 
101 - (void)accessibilityElementDidLoseFocus {
102  [self.semanticsObject accessibilityElementDidLoseFocus];
103 }
104 
105 - (id)accessibilityContainer {
106  return self.semanticsObject.accessibilityContainer;
107 }
108 
109 - (NSInteger)accessibilityElementCount {
110  return self.semanticsObject.children.count;
111 }
112 
113 - (void)scrollViewWillEndDragging:(UIScrollView*)scrollView
114  withVelocity:(CGPoint)velocity
115  targetContentOffset:(inout CGPoint*)targetContentOffset {
116  _isDoingSystemScrolling = YES;
117 }
118 
119 - (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView {
120  _isDoingSystemScrolling = NO;
121 }
122 
123 @end
NSArray< SemanticsObject * > * children