@@ -123,22 +123,94 @@ + (BOOL)isValidEmail:(NSString *)email {
123
123
}
124
124
125
125
+ (UIActivityIndicatorView *)addActivityIndicator : (UIView *)view {
126
+ if (!view) {
127
+ return nil ;
128
+ }
126
129
UIActivityIndicatorView *activityIndicator =
127
130
[[UIActivityIndicatorView alloc ]
128
131
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
+
135
178
[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 ]];
142
214
return activityIndicator;
143
215
}
144
216
@@ -241,6 +313,7 @@ - (void)incrementActivity {
241
313
dispatch_after (dispatch_time (DISPATCH_TIME_NOW,
242
314
(int64_t )(kActivityIndiactorAnimationDelay * NSEC_PER_SEC)),
243
315
dispatch_get_main_queue (), ^{
316
+ [_activityIndicator.superview bringSubviewToFront: _activityIndicator];
244
317
if (_activityCount > 0 ) {
245
318
[_activityIndicator startAnimating ];
246
319
}
@@ -256,6 +329,7 @@ - (void)decrementActivity {
256
329
}
257
330
258
331
if (_activityCount == 0 ) {
332
+ [_activityIndicator.superview sendSubviewToBack: _activityIndicator];
259
333
[_activityIndicator stopAnimating ];
260
334
}
261
335
}
0 commit comments