Skip to content

Commit 0dfa345

Browse files
committed
Block UI when activity indicator is shown. Issue #317
1 parent f79465c commit 0dfa345

File tree

1 file changed

+86
-12
lines changed

1 file changed

+86
-12
lines changed

FirebaseAuthUI/FUIAuthBaseViewController.m

Lines changed: 86 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,22 +123,94 @@ + (BOOL)isValidEmail:(NSString *)email {
123123
}
124124

125125
+ (UIActivityIndicatorView *)addActivityIndicator:(UIView *)view {
126+
if (!view) {
127+
return nil;
128+
}
126129
UIActivityIndicatorView *activityIndicator =
127130
[[UIActivityIndicatorView alloc]
128131
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
129-
activityIndicator.frame = CGRectInset(activityIndicator.frame,
130-
-kActivityIndiactorPadding,
131-
-kActivityIndiactorPadding);
132-
activityIndicator.backgroundColor =
133-
[UIColor colorWithWhite:0 alpha:kActivityIndiactorOverlayOpacity];
134-
activityIndicator.layer.cornerRadius = kActivityIndiactorOverlayCornerRadius;
132+
UIView *tintView = [[UIView alloc] initWithFrame:CGRectInset(activityIndicator.frame,
133+
-kActivityIndiactorPadding,
134+
-kActivityIndiactorPadding)];
135+
tintView.backgroundColor =
136+
[UIColor colorWithWhite:0 alpha:kActivityIndiactorOverlayOpacity];
137+
tintView.layer.cornerRadius = kActivityIndiactorOverlayCornerRadius;
138+
[activityIndicator addSubview:tintView];
139+
140+
// Align tintView (transparent background).
141+
tintView.translatesAutoresizingMaskIntoConstraints = NO;
142+
[activityIndicator addConstraint:
143+
[NSLayoutConstraint constraintWithItem:tintView
144+
attribute:NSLayoutAttributeWidth
145+
relatedBy:NSLayoutRelationEqual
146+
toItem:nil
147+
attribute:NSLayoutAttributeNotAnAttribute
148+
multiplier:1
149+
constant:CGRectGetWidth(tintView.frame)]];
150+
[activityIndicator addConstraint:
151+
[NSLayoutConstraint constraintWithItem:tintView
152+
attribute:NSLayoutAttributeCenterX
153+
relatedBy:NSLayoutRelationEqual
154+
toItem:activityIndicator
155+
attribute:NSLayoutAttributeCenterX
156+
multiplier:1
157+
constant:0]];
158+
159+
[activityIndicator addConstraint:
160+
[NSLayoutConstraint constraintWithItem:tintView
161+
attribute:NSLayoutAttributeHeight
162+
relatedBy:NSLayoutRelationEqual
163+
toItem:nil
164+
attribute:NSLayoutAttributeNotAnAttribute
165+
multiplier:1
166+
constant:CGRectGetHeight(tintView.frame)]];
167+
[activityIndicator addConstraint:
168+
[NSLayoutConstraint constraintWithItem:tintView
169+
attribute:NSLayoutAttributeCenterY
170+
relatedBy:NSLayoutRelationEqual
171+
toItem:activityIndicator
172+
attribute:NSLayoutAttributeCenterY
173+
multiplier:1
174+
constant:0]];
175+
176+
[activityIndicator sendSubviewToBack:tintView];
177+
135178
[view addSubview:activityIndicator];
136-
137-
CGPoint activityIndicatorCenter = view.center;
138-
// Compensate for bounds adjustment if any.
139-
activityIndicatorCenter.y += view.bounds.origin.y;
140-
activityIndicator.center = activityIndicatorCenter;
141-
179+
// Align activity indicator.
180+
activityIndicator.translatesAutoresizingMaskIntoConstraints = NO;
181+
[view addConstraint:
182+
[NSLayoutConstraint constraintWithItem:activityIndicator
183+
attribute:NSLayoutAttributeWidth
184+
relatedBy:NSLayoutRelationEqual
185+
toItem:view
186+
attribute:NSLayoutAttributeWidth
187+
multiplier:1
188+
constant:0]];
189+
[view addConstraint:
190+
[NSLayoutConstraint constraintWithItem:activityIndicator
191+
attribute:NSLayoutAttributeCenterX
192+
relatedBy:NSLayoutRelationEqual
193+
toItem:view
194+
attribute:NSLayoutAttributeCenterX
195+
multiplier:1
196+
constant:0]];
197+
198+
[view addConstraint:
199+
[NSLayoutConstraint constraintWithItem:activityIndicator
200+
attribute:NSLayoutAttributeHeight
201+
relatedBy:NSLayoutRelationEqual
202+
toItem:view
203+
attribute:NSLayoutAttributeHeight
204+
multiplier:1
205+
constant:0]];
206+
[view addConstraint:
207+
[NSLayoutConstraint constraintWithItem:activityIndicator
208+
attribute:NSLayoutAttributeCenterY
209+
relatedBy:NSLayoutRelationEqual
210+
toItem:view
211+
attribute:NSLayoutAttributeCenterY
212+
multiplier:1
213+
constant:0]];
142214
return activityIndicator;
143215
}
144216

@@ -241,6 +313,7 @@ - (void)incrementActivity {
241313
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
242314
(int64_t)(kActivityIndiactorAnimationDelay * NSEC_PER_SEC)),
243315
dispatch_get_main_queue(), ^{
316+
[_activityIndicator.superview bringSubviewToFront:_activityIndicator];
244317
if (_activityCount > 0) {
245318
[_activityIndicator startAnimating];
246319
}
@@ -256,6 +329,7 @@ - (void)decrementActivity {
256329
}
257330

258331
if (_activityCount == 0) {
332+
[_activityIndicator.superview sendSubviewToBack:_activityIndicator];
259333
[_activityIndicator stopAnimating];
260334
}
261335
}

0 commit comments

Comments
 (0)