@@ -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