added iOS source code
[wl-app.git] / iOS / Pods / MBProgressHUD / MBProgressHUD.h
1 //
2 //  MBProgressHUD.h
3 //  Version 1.1.0
4 //  Created by Matej Bukovinski on 2.4.09.
5 //
6
7 // This code is distributed under the terms and conditions of the MIT license. 
8
9 // Copyright © 2009-2016 Matej Bukovinski
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining a copy
12 // of this software and associated documentation files (the "Software"), to deal
13 // in the Software without restriction, including without limitation the rights
14 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 // copies of the Software, and to permit persons to whom the Software is
16 // furnished to do so, subject to the following conditions:
17 //
18 // The above copyright notice and this permission notice shall be included in
19 // all copies or substantial portions of the Software.
20 //
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 // THE SOFTWARE.
28
29 #import <Foundation/Foundation.h>
30 #import <UIKit/UIKit.h>
31 #import <CoreGraphics/CoreGraphics.h>
32
33 @class MBBackgroundView;
34 @protocol MBProgressHUDDelegate;
35
36
37 extern CGFloat const MBProgressMaxOffset;
38
39 typedef NS_ENUM(NSInteger, MBProgressHUDMode) {
40     /// UIActivityIndicatorView.
41     MBProgressHUDModeIndeterminate,
42     /// A round, pie-chart like, progress view.
43     MBProgressHUDModeDeterminate,
44     /// Horizontal progress bar.
45     MBProgressHUDModeDeterminateHorizontalBar,
46     /// Ring-shaped progress view.
47     MBProgressHUDModeAnnularDeterminate,
48     /// Shows a custom view.
49     MBProgressHUDModeCustomView,
50     /// Shows only labels.
51     MBProgressHUDModeText
52 };
53
54 typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) {
55     /// Opacity animation
56     MBProgressHUDAnimationFade,
57     /// Opacity + scale animation (zoom in when appearing zoom out when disappearing)
58     MBProgressHUDAnimationZoom,
59     /// Opacity + scale animation (zoom out style)
60     MBProgressHUDAnimationZoomOut,
61     /// Opacity + scale animation (zoom in style)
62     MBProgressHUDAnimationZoomIn
63 };
64
65 typedef NS_ENUM(NSInteger, MBProgressHUDBackgroundStyle) {
66     /// Solid color background
67     MBProgressHUDBackgroundStyleSolidColor,
68     /// UIVisualEffectView or UIToolbar.layer background view
69     MBProgressHUDBackgroundStyleBlur
70 };
71
72 typedef void (^MBProgressHUDCompletionBlock)(void);
73
74
75 NS_ASSUME_NONNULL_BEGIN
76
77
78 /** 
79  * Displays a simple HUD window containing a progress indicator and two optional labels for short messages.
80  *
81  * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class.
82  * The MBProgressHUD window spans over the entire space given to it by the initWithFrame: constructor and catches all
83  * user input on this region, thereby preventing the user operations on components below the view.
84  *
85  * @note To still allow touches to pass through the HUD, you can set hud.userInteractionEnabled = NO.
86  * @attention MBProgressHUD is a UI class and should therefore only be accessed on the main thread.
87  */
88 @interface MBProgressHUD : UIView
89
90 /**
91  * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:.
92  *
93  * @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden.
94  *
95  * @param view The view that the HUD will be added to
96  * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use
97  * animations while appearing.
98  * @return A reference to the created HUD.
99  *
100  * @see hideHUDForView:animated:
101  * @see animationType
102  */
103 + (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;
104
105 /// @name Showing and hiding
106
107 /**
108  * Finds the top-most HUD subview that hasn't finished and hides it. The counterpart to this method is showHUDAddedTo:animated:.
109  *
110  * @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden.
111  *
112  * @param view The view that is going to be searched for a HUD subview.
113  * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
114  * animations while disappearing.
115  * @return YES if a HUD was found and removed, NO otherwise.
116  *
117  * @see showHUDAddedTo:animated:
118  * @see animationType
119  */
120 + (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated;
121
122 /**
123  * Finds the top-most HUD subview that hasn't finished and returns it.
124  *
125  * @param view The view that is going to be searched.
126  * @return A reference to the last HUD subview discovered.
127  */
128 + (nullable MBProgressHUD *)HUDForView:(UIView *)view;
129
130 /**
131  * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with
132  * view.bounds as the parameter.
133  *
134  * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as
135  * the HUD's superview (i.e., the view that the HUD will be added to).
136  */
137 - (instancetype)initWithView:(UIView *)view;
138
139 /** 
140  * Displays the HUD. 
141  *
142  * @note You need to make sure that the main thread completes its run loop soon after this method call so that
143  * the user interface can be updated. Call this method when your task is already set up to be executed in a new thread
144  * (e.g., when using something like NSOperation or making an asynchronous call like NSURLRequest).
145  *
146  * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use
147  * animations while appearing.
148  *
149  * @see animationType
150  */
151 - (void)showAnimated:(BOOL)animated;
152
153 /** 
154  * Hides the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to
155  * hide the HUD when your task completes.
156  *
157  * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
158  * animations while disappearing.
159  *
160  * @see animationType
161  */
162 - (void)hideAnimated:(BOOL)animated;
163
164 /** 
165  * Hides the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to
166  * hide the HUD when your task completes.
167  *
168  * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use
169  * animations while disappearing.
170  * @param delay Delay in seconds until the HUD is hidden.
171  *
172  * @see animationType
173  */
174 - (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay;
175
176 /**
177  * The HUD delegate object. Receives HUD state notifications.
178  */
179 @property (weak, nonatomic) id<MBProgressHUDDelegate> delegate;
180
181 /**
182  * Called after the HUD is hiden.
183  */
184 @property (copy, nullable) MBProgressHUDCompletionBlock completionBlock;
185
186 /*
187  * Grace period is the time (in seconds) that the invoked method may be run without
188  * showing the HUD. If the task finishes before the grace time runs out, the HUD will
189  * not be shown at all.
190  * This may be used to prevent HUD display for very short tasks.
191  * Defaults to 0 (no grace time).
192  */
193 @property (assign, nonatomic) NSTimeInterval graceTime;
194
195 /**
196  * The minimum time (in seconds) that the HUD is shown.
197  * This avoids the problem of the HUD being shown and than instantly hidden.
198  * Defaults to 0 (no minimum show time).
199  */
200 @property (assign, nonatomic) NSTimeInterval minShowTime;
201
202 /**
203  * Removes the HUD from its parent view when hidden.
204  * Defaults to NO.
205  */
206 @property (assign, nonatomic) BOOL removeFromSuperViewOnHide;
207
208 /// @name Appearance
209
210 /** 
211  * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate.
212  */
213 @property (assign, nonatomic) MBProgressHUDMode mode;
214
215 /**
216  * A color that gets forwarded to all labels and supported indicators. Also sets the tintColor
217  * for custom views on iOS 7+. Set to nil to manage color individually.
218  * Defaults to semi-translucent black on iOS 7 and later and white on earlier iOS versions.
219  */
220 @property (strong, nonatomic, nullable) UIColor *contentColor UI_APPEARANCE_SELECTOR;
221
222 /**
223  * The animation type that should be used when the HUD is shown and hidden.
224  */
225 @property (assign, nonatomic) MBProgressHUDAnimation animationType UI_APPEARANCE_SELECTOR;
226
227 /**
228  * The bezel offset relative to the center of the view. You can use MBProgressMaxOffset
229  * and -MBProgressMaxOffset to move the HUD all the way to the screen edge in each direction.
230  * E.g., CGPointMake(0.f, MBProgressMaxOffset) would position the HUD centered on the bottom edge.
231  */
232 @property (assign, nonatomic) CGPoint offset UI_APPEARANCE_SELECTOR;
233
234 /**
235  * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views).
236  * This also represents the minimum bezel distance to the edge of the HUD view.
237  * Defaults to 20.f
238  */
239 @property (assign, nonatomic) CGFloat margin UI_APPEARANCE_SELECTOR;
240
241 /**
242  * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size).
243  */
244 @property (assign, nonatomic) CGSize minSize UI_APPEARANCE_SELECTOR;
245
246 /**
247  * Force the HUD dimensions to be equal if possible.
248  */
249 @property (assign, nonatomic, getter = isSquare) BOOL square UI_APPEARANCE_SELECTOR;
250
251 /**
252  * When enabled, the bezel center gets slightly affected by the device accelerometer data.
253  * Has no effect on iOS < 7.0. Defaults to YES.
254  */
255 @property (assign, nonatomic, getter=areDefaultMotionEffectsEnabled) BOOL defaultMotionEffectsEnabled UI_APPEARANCE_SELECTOR;
256
257 /// @name Progress
258
259 /**
260  * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0.
261  */
262 @property (assign, nonatomic) float progress;
263
264 /// @name ProgressObject
265
266 /**
267  * The NSProgress object feeding the progress information to the progress indicator.
268  */
269 @property (strong, nonatomic, nullable) NSProgress *progressObject;
270
271 /// @name Views
272
273 /**
274  * The view containing the labels and indicator (or customView).
275  */
276 @property (strong, nonatomic, readonly) MBBackgroundView *bezelView;
277
278 /**
279  * View covering the entire HUD area, placed behind bezelView.
280  */
281 @property (strong, nonatomic, readonly) MBBackgroundView *backgroundView;
282
283 /**
284  * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView.
285  * The view should implement intrinsicContentSize for proper sizing. For best results use approximately 37 by 37 pixels.
286  */
287 @property (strong, nonatomic, nullable) UIView *customView;
288
289 /**
290  * A label that holds an optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit
291  * the entire text.
292  */
293 @property (strong, nonatomic, readonly) UILabel *label;
294
295 /**
296  * A label that holds an optional details message displayed below the labelText message. The details text can span multiple lines.
297  */
298 @property (strong, nonatomic, readonly) UILabel *detailsLabel;
299
300 /**
301  * A button that is placed below the labels. Visible only if a target / action is added. 
302  */
303 @property (strong, nonatomic, readonly) UIButton *button;
304
305 @end
306
307
308 @protocol MBProgressHUDDelegate <NSObject>
309
310 @optional
311
312 /** 
313  * Called after the HUD was fully hidden from the screen. 
314  */
315 - (void)hudWasHidden:(MBProgressHUD *)hud;
316
317 @end
318
319
320 /**
321  * A progress view for showing definite progress by filling up a circle (pie chart).
322  */
323 @interface MBRoundProgressView : UIView 
324
325 /**
326  * Progress (0.0 to 1.0)
327  */
328 @property (nonatomic, assign) float progress;
329
330 /**
331  * Indicator progress color.
332  * Defaults to white [UIColor whiteColor].
333  */
334 @property (nonatomic, strong) UIColor *progressTintColor;
335
336 /**
337  * Indicator background (non-progress) color. 
338  * Only applicable on iOS versions older than iOS 7.
339  * Defaults to translucent white (alpha 0.1).
340  */
341 @property (nonatomic, strong) UIColor *backgroundTintColor;
342
343 /*
344  * Display mode - NO = round or YES = annular. Defaults to round.
345  */
346 @property (nonatomic, assign, getter = isAnnular) BOOL annular;
347
348 @end
349
350
351 /**
352  * A flat bar progress view. 
353  */
354 @interface MBBarProgressView : UIView
355
356 /**
357  * Progress (0.0 to 1.0)
358  */
359 @property (nonatomic, assign) float progress;
360
361 /**
362  * Bar border line color.
363  * Defaults to white [UIColor whiteColor].
364  */
365 @property (nonatomic, strong) UIColor *lineColor;
366
367 /**
368  * Bar background color.
369  * Defaults to clear [UIColor clearColor];
370  */
371 @property (nonatomic, strong) UIColor *progressRemainingColor;
372
373 /**
374  * Bar progress color.
375  * Defaults to white [UIColor whiteColor].
376  */
377 @property (nonatomic, strong) UIColor *progressColor;
378
379 @end
380
381
382 @interface MBBackgroundView : UIView
383
384 /**
385  * The background style. 
386  * Defaults to MBProgressHUDBackgroundStyleBlur on iOS 7 or later and MBProgressHUDBackgroundStyleSolidColor otherwise.
387  * @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions.
388  */
389 @property (nonatomic) MBProgressHUDBackgroundStyle style;
390
391 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV
392 /**
393  * The blur effect style, when using MBProgressHUDBackgroundStyleBlur.
394  * Defaults to UIBlurEffectStyleLight.
395  */
396 @property (nonatomic) UIBlurEffectStyle blurEffectStyle;
397 #endif
398
399 /**
400  * The background color or the blur tint color.
401  * @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions.
402  */
403 @property (nonatomic, strong) UIColor *color;
404
405 @end
406
407 @interface MBProgressHUD (Deprecated)
408
409 + (NSArray *)allHUDsForView:(UIView *)view __attribute__((deprecated("Store references when using more than one HUD per view.")));
410 + (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated __attribute__((deprecated("Store references when using more than one HUD per view.")));
411
412 - (id)initWithWindow:(UIWindow *)window __attribute__((deprecated("Use initWithView: instead.")));
413
414 - (void)show:(BOOL)animated __attribute__((deprecated("Use showAnimated: instead.")));
415 - (void)hide:(BOOL)animated __attribute__((deprecated("Use hideAnimated: instead.")));
416 - (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay __attribute__((deprecated("Use hideAnimated:afterDelay: instead.")));
417
418 - (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated __attribute__((deprecated("Use GCD directly.")));
419 - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block __attribute__((deprecated("Use GCD directly.")));
420 - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly.")));
421 - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue __attribute__((deprecated("Use GCD directly.")));
422 - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue
423      completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly.")));
424 @property (assign) BOOL taskInProgress __attribute__((deprecated("No longer needed.")));
425
426 @property (nonatomic, copy) NSString *labelText __attribute__((deprecated("Use label.text instead.")));
427 @property (nonatomic, strong) UIFont *labelFont __attribute__((deprecated("Use label.font instead.")));
428 @property (nonatomic, strong) UIColor *labelColor __attribute__((deprecated("Use label.textColor instead.")));
429 @property (nonatomic, copy) NSString *detailsLabelText __attribute__((deprecated("Use detailsLabel.text instead.")));
430 @property (nonatomic, strong) UIFont *detailsLabelFont __attribute__((deprecated("Use detailsLabel.font instead.")));
431 @property (nonatomic, strong) UIColor *detailsLabelColor __attribute__((deprecated("Use detailsLabel.textColor instead.")));
432 @property (assign, nonatomic) CGFloat opacity __attribute__((deprecated("Customize bezelView properties instead.")));
433 @property (strong, nonatomic) UIColor *color __attribute__((deprecated("Customize the bezelView color instead.")));
434 @property (assign, nonatomic) CGFloat xOffset __attribute__((deprecated("Set offset.x instead.")));
435 @property (assign, nonatomic) CGFloat yOffset __attribute__((deprecated("Set offset.y instead.")));
436 @property (assign, nonatomic) CGFloat cornerRadius __attribute__((deprecated("Set bezelView.layer.cornerRadius instead.")));
437 @property (assign, nonatomic) BOOL dimBackground __attribute__((deprecated("Customize HUD background properties instead.")));
438 @property (strong, nonatomic) UIColor *activityIndicatorColor __attribute__((deprecated("Use UIAppearance to customize UIActivityIndicatorView. E.g.: [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil].color = [UIColor redColor];")));
439 @property (atomic, assign, readonly) CGSize size __attribute__((deprecated("Get the bezelView.frame.size instead.")));
440
441 @end
442
443 NS_ASSUME_NONNULL_END