|
|
@@ -0,0 +1,436 @@ |
|
|
|
// |
|
|
|
// MBProgressHUD.h |
|
|
|
// Version 1.0.0 |
|
|
|
// Created by Matej Bukovinski on 2.4.09. |
|
|
|
// |
|
|
|
|
|
|
|
// This code is distributed under the terms and conditions of the MIT license. |
|
|
|
|
|
|
|
// Copyright © 2009-2016 Matej Bukovinski |
|
|
|
// |
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy |
|
|
|
// of this software and associated documentation files (the "Software"), to deal |
|
|
|
// in the Software without restriction, including without limitation the rights |
|
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
|
|
// copies of the Software, and to permit persons to whom the Software is |
|
|
|
// furnished to do so, subject to the following conditions: |
|
|
|
// |
|
|
|
// The above copyright notice and this permission notice shall be included in |
|
|
|
// all copies or substantial portions of the Software. |
|
|
|
// |
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|
|
|
// THE SOFTWARE. |
|
|
|
|
|
|
|
#import <Foundation/Foundation.h> |
|
|
|
#import <UIKit/UIKit.h> |
|
|
|
#import <CoreGraphics/CoreGraphics.h> |
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_BEGIN |
|
|
|
|
|
|
|
@class MBBackgroundView; |
|
|
|
@protocol MBProgressHUDDelegate; |
|
|
|
|
|
|
|
|
|
|
|
extern CGFloat const MBProgressMaxOffset; |
|
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, MBProgressHUDMode) { |
|
|
|
/// UIActivityIndicatorView. |
|
|
|
MBProgressHUDModeIndeterminate, |
|
|
|
/// A round, pie-chart like, progress view. |
|
|
|
MBProgressHUDModeDeterminate, |
|
|
|
/// Horizontal progress bar. |
|
|
|
MBProgressHUDModeDeterminateHorizontalBar, |
|
|
|
/// Ring-shaped progress view. |
|
|
|
MBProgressHUDModeAnnularDeterminate, |
|
|
|
/// Shows a custom view. |
|
|
|
MBProgressHUDModeCustomView, |
|
|
|
/// Shows only labels. |
|
|
|
MBProgressHUDModeText |
|
|
|
}; |
|
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) { |
|
|
|
/// Opacity animation |
|
|
|
MBProgressHUDAnimationFade, |
|
|
|
/// Opacity + scale animation (zoom in when appearing zoom out when disappearing) |
|
|
|
MBProgressHUDAnimationZoom, |
|
|
|
/// Opacity + scale animation (zoom out style) |
|
|
|
MBProgressHUDAnimationZoomOut, |
|
|
|
/// Opacity + scale animation (zoom in style) |
|
|
|
MBProgressHUDAnimationZoomIn |
|
|
|
}; |
|
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, MBProgressHUDBackgroundStyle) { |
|
|
|
/// Solid color background |
|
|
|
MBProgressHUDBackgroundStyleSolidColor, |
|
|
|
/// UIVisualEffectView or UIToolbar.layer background view |
|
|
|
MBProgressHUDBackgroundStyleBlur |
|
|
|
}; |
|
|
|
|
|
|
|
typedef void (^MBProgressHUDCompletionBlock)(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Displays a simple HUD window containing a progress indicator and two optional labels for short messages. |
|
|
|
* |
|
|
|
* This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class. |
|
|
|
* The MBProgressHUD window spans over the entire space given to it by the initWithFrame: constructor and catches all |
|
|
|
* user input on this region, thereby preventing the user operations on components below the view. |
|
|
|
* |
|
|
|
* @note To still allow touches to pass through the HUD, you can set hud.userInteractionEnabled = NO. |
|
|
|
* @attention MBProgressHUD is a UI class and should therefore only be accessed on the main thread. |
|
|
|
*/ |
|
|
|
@interface MBProgressHUD : UIView |
|
|
|
|
|
|
|
/** |
|
|
|
* Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:. |
|
|
|
* |
|
|
|
* @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. |
|
|
|
* |
|
|
|
* @param view The view that the HUD will be added to |
|
|
|
* @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use |
|
|
|
* animations while appearing. |
|
|
|
* @return A reference to the created HUD. |
|
|
|
* |
|
|
|
* @see hideHUDForView:animated: |
|
|
|
* @see animationType |
|
|
|
*/ |
|
|
|
+ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated; |
|
|
|
|
|
|
|
/// @name Showing and hiding |
|
|
|
|
|
|
|
/** |
|
|
|
* Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:. |
|
|
|
* |
|
|
|
* @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. |
|
|
|
* |
|
|
|
* @param view The view that is going to be searched for a HUD subview. |
|
|
|
* @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use |
|
|
|
* animations while disappearing. |
|
|
|
* @return YES if a HUD was found and removed, NO otherwise. |
|
|
|
* |
|
|
|
* @see showHUDAddedTo:animated: |
|
|
|
* @see animationType |
|
|
|
*/ |
|
|
|
+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated; |
|
|
|
|
|
|
|
/** |
|
|
|
* Finds the top-most HUD subview and returns it. |
|
|
|
* |
|
|
|
* @param view The view that is going to be searched. |
|
|
|
* @return A reference to the last HUD subview discovered. |
|
|
|
*/ |
|
|
|
+ (nullable MBProgressHUD *)HUDForView:(UIView *)view; |
|
|
|
|
|
|
|
/** |
|
|
|
* A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with |
|
|
|
* view.bounds as the parameter. |
|
|
|
* |
|
|
|
* @param view The view instance that will provide the bounds for the HUD. Should be the same instance as |
|
|
|
* the HUD's superview (i.e., the view that the HUD will be added to). |
|
|
|
*/ |
|
|
|
- (instancetype)initWithView:(UIView *)view; |
|
|
|
|
|
|
|
/** |
|
|
|
* Displays the HUD. |
|
|
|
* |
|
|
|
* @note You need to make sure that the main thread completes its run loop soon after this method call so that |
|
|
|
* the user interface can be updated. Call this method when your task is already set up to be executed in a new thread |
|
|
|
* (e.g., when using something like NSOperation or making an asynchronous call like NSURLRequest). |
|
|
|
* |
|
|
|
* @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use |
|
|
|
* animations while appearing. |
|
|
|
* |
|
|
|
* @see animationType |
|
|
|
*/ |
|
|
|
- (void)showAnimated:(BOOL)animated; |
|
|
|
|
|
|
|
/** |
|
|
|
* Hides the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to |
|
|
|
* hide the HUD when your task completes. |
|
|
|
* |
|
|
|
* @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use |
|
|
|
* animations while disappearing. |
|
|
|
* |
|
|
|
* @see animationType |
|
|
|
*/ |
|
|
|
- (void)hideAnimated:(BOOL)animated; |
|
|
|
|
|
|
|
/** |
|
|
|
* Hides the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to |
|
|
|
* hide the HUD when your task completes. |
|
|
|
* |
|
|
|
* @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use |
|
|
|
* animations while disappearing. |
|
|
|
* @param delay Delay in seconds until the HUD is hidden. |
|
|
|
* |
|
|
|
* @see animationType |
|
|
|
*/ |
|
|
|
- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay; |
|
|
|
|
|
|
|
/** |
|
|
|
* The HUD delegate object. Receives HUD state notifications. |
|
|
|
*/ |
|
|
|
|
|
|
|
@property (weak, nonatomic, nullable) id<MBProgressHUDDelegate> delegate; |
|
|
|
|
|
|
|
/** |
|
|
|
* Called after the HUD is hiden. |
|
|
|
*/ |
|
|
|
@property (copy, nullable) MBProgressHUDCompletionBlock completionBlock; |
|
|
|
|
|
|
|
/* |
|
|
|
* Grace period is the time (in seconds) that the invoked method may be run without |
|
|
|
* showing the HUD. If the task finishes before the grace time runs out, the HUD will |
|
|
|
* not be shown at all. |
|
|
|
* This may be used to prevent HUD display for very short tasks. |
|
|
|
* Defaults to 0 (no grace time). |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) NSTimeInterval graceTime; |
|
|
|
|
|
|
|
/** |
|
|
|
* The minimum time (in seconds) that the HUD is shown. |
|
|
|
* This avoids the problem of the HUD being shown and than instantly hidden. |
|
|
|
* Defaults to 0 (no minimum show time). |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) NSTimeInterval minShowTime; |
|
|
|
|
|
|
|
/** |
|
|
|
* Removes the HUD from its parent view when hidden. |
|
|
|
* Defaults to NO. |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) BOOL removeFromSuperViewOnHide; |
|
|
|
|
|
|
|
/// @name Appearance |
|
|
|
|
|
|
|
/** |
|
|
|
* MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate. |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) MBProgressHUDMode mode; |
|
|
|
|
|
|
|
/** |
|
|
|
* A color that gets forwarded to all labels and supported indicators. Also sets the tintColor |
|
|
|
* for custom views on iOS 7+. Set to nil to manage color individually. |
|
|
|
* Defaults to semi-translucent black on iOS 7 and later and white on earlier iOS versions. |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, nullable) UIColor *contentColor UI_APPEARANCE_SELECTOR; |
|
|
|
|
|
|
|
/** |
|
|
|
* The animation type that should be used when the HUD is shown and hidden. |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) MBProgressHUDAnimation animationType UI_APPEARANCE_SELECTOR; |
|
|
|
|
|
|
|
/** |
|
|
|
* The bezel offset relative to the center of the view. You can use MBProgressMaxOffset |
|
|
|
* and -MBProgressMaxOffset to move the HUD all the way to the screen edge in each direction. |
|
|
|
* E.g., CGPointMake(0.f, MBProgressMaxOffset) would position the HUD centered on the bottom edge. |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) CGPoint offset UI_APPEARANCE_SELECTOR; |
|
|
|
|
|
|
|
/** |
|
|
|
* The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views). |
|
|
|
* This also represents the minimum bezel distance to the edge of the HUD view. |
|
|
|
* Defaults to 20.f |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) CGFloat margin UI_APPEARANCE_SELECTOR; |
|
|
|
|
|
|
|
/** |
|
|
|
* The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size). |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) CGSize minSize UI_APPEARANCE_SELECTOR; |
|
|
|
|
|
|
|
/** |
|
|
|
* Force the HUD dimensions to be equal if possible. |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic, getter = isSquare) BOOL square UI_APPEARANCE_SELECTOR; |
|
|
|
|
|
|
|
/** |
|
|
|
* When enabled, the bezel center gets slightly affected by the device accelerometer data. |
|
|
|
* Has no effect on iOS < 7.0. Defaults to YES. |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic, getter=areDefaultMotionEffectsEnabled) BOOL defaultMotionEffectsEnabled UI_APPEARANCE_SELECTOR; |
|
|
|
|
|
|
|
/// @name Progress |
|
|
|
|
|
|
|
/** |
|
|
|
* The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0. |
|
|
|
*/ |
|
|
|
@property (assign, nonatomic) float progress; |
|
|
|
|
|
|
|
/// @name ProgressObject |
|
|
|
|
|
|
|
/** |
|
|
|
* The NSProgress object feeding the progress information to the progress indicator. |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, nullable) NSProgress *progressObject; |
|
|
|
|
|
|
|
/// @name Views |
|
|
|
|
|
|
|
/** |
|
|
|
* The view containing the labels and indicator (or customView). |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, readonly) MBBackgroundView *bezelView; |
|
|
|
|
|
|
|
/** |
|
|
|
* View covering the entire HUD area, placed behind bezelView. |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, readonly) MBBackgroundView *backgroundView; |
|
|
|
|
|
|
|
/** |
|
|
|
* The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView. |
|
|
|
* The view should implement intrinsicContentSize for proper sizing. For best results use approximately 37 by 37 pixels. |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, nullable) UIView *customView; |
|
|
|
|
|
|
|
/** |
|
|
|
* A label that holds an optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit |
|
|
|
* the entire text. |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, readonly) UILabel *label; |
|
|
|
|
|
|
|
/** |
|
|
|
* A label that holds an optional details message displayed below the labelText message. The details text can span multiple lines. |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, readonly) UILabel *detailsLabel; |
|
|
|
|
|
|
|
/** |
|
|
|
* A button that is placed below the labels. Visible only if a target / action is added. |
|
|
|
*/ |
|
|
|
@property (strong, nonatomic, readonly) UIButton *button; |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
|
|
|
|
|
@protocol MBProgressHUDDelegate <NSObject> |
|
|
|
|
|
|
|
@optional |
|
|
|
|
|
|
|
/** |
|
|
|
* Called after the HUD was fully hidden from the screen. |
|
|
|
*/ |
|
|
|
- (void)hudWasHidden:(MBProgressHUD *)hud; |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* A progress view for showing definite progress by filling up a circle (pie chart). |
|
|
|
*/ |
|
|
|
@interface MBRoundProgressView : UIView |
|
|
|
|
|
|
|
/** |
|
|
|
* Progress (0.0 to 1.0) |
|
|
|
*/ |
|
|
|
@property (nonatomic, assign) float progress; |
|
|
|
|
|
|
|
/** |
|
|
|
* Indicator progress color. |
|
|
|
* Defaults to white [UIColor whiteColor]. |
|
|
|
*/ |
|
|
|
@property (nonatomic, strong) UIColor *progressTintColor; |
|
|
|
|
|
|
|
/** |
|
|
|
* Indicator background (non-progress) color. |
|
|
|
* Only applicable on iOS versions older than iOS 7. |
|
|
|
* Defaults to translucent white (alpha 0.1). |
|
|
|
*/ |
|
|
|
@property (nonatomic, strong) UIColor *backgroundTintColor; |
|
|
|
|
|
|
|
/* |
|
|
|
* Display mode - NO = round or YES = annular. Defaults to round. |
|
|
|
*/ |
|
|
|
@property (nonatomic, assign, getter = isAnnular) BOOL annular; |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* A flat bar progress view. |
|
|
|
*/ |
|
|
|
@interface MBBarProgressView : UIView |
|
|
|
|
|
|
|
/** |
|
|
|
* Progress (0.0 to 1.0) |
|
|
|
*/ |
|
|
|
@property (nonatomic, assign) float progress; |
|
|
|
|
|
|
|
/** |
|
|
|
* Bar border line color. |
|
|
|
* Defaults to white [UIColor whiteColor]. |
|
|
|
*/ |
|
|
|
@property (nonatomic, strong) UIColor *lineColor; |
|
|
|
|
|
|
|
/** |
|
|
|
* Bar background color. |
|
|
|
* Defaults to clear [UIColor clearColor]; |
|
|
|
*/ |
|
|
|
@property (nonatomic, strong) UIColor *progressRemainingColor; |
|
|
|
|
|
|
|
/** |
|
|
|
* Bar progress color. |
|
|
|
* Defaults to white [UIColor whiteColor]. |
|
|
|
*/ |
|
|
|
@property (nonatomic, strong) UIColor *progressColor; |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
|
|
|
|
|
@interface MBBackgroundView : UIView |
|
|
|
|
|
|
|
/** |
|
|
|
* The background style. |
|
|
|
* Defaults to MBProgressHUDBackgroundStyleBlur on iOS 7 or later and MBProgressHUDBackgroundStyleSolidColor otherwise. |
|
|
|
* @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions. |
|
|
|
*/ |
|
|
|
@property (nonatomic) MBProgressHUDBackgroundStyle style; |
|
|
|
|
|
|
|
/** |
|
|
|
* The background color or the blur tint color. |
|
|
|
* @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions. |
|
|
|
*/ |
|
|
|
@property (nonatomic, strong) UIColor *color; |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
|
@interface MBProgressHUD (Deprecated) |
|
|
|
|
|
|
|
+ (NSArray *)allHUDsForView:(UIView *)view __attribute__((deprecated("Store references when using more than one HUD per view."))); |
|
|
|
+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated __attribute__((deprecated("Store references when using more than one HUD per view."))); |
|
|
|
|
|
|
|
- (id)initWithWindow:(UIWindow *)window __attribute__((deprecated("Use initWithView: instead."))); |
|
|
|
|
|
|
|
- (void)show:(BOOL)animated __attribute__((deprecated("Use showAnimated: instead."))); |
|
|
|
- (void)hide:(BOOL)animated __attribute__((deprecated("Use hideAnimated: instead."))); |
|
|
|
- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay __attribute__((deprecated("Use hideAnimated:afterDelay: instead."))); |
|
|
|
|
|
|
|
- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated __attribute__((deprecated("Use GCD directly."))); |
|
|
|
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block __attribute__((deprecated("Use GCD directly."))); |
|
|
|
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly."))); |
|
|
|
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue __attribute__((deprecated("Use GCD directly."))); |
|
|
|
- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue |
|
|
|
completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly."))); |
|
|
|
@property (assign) BOOL taskInProgress __attribute__((deprecated("No longer needed."))); |
|
|
|
|
|
|
|
@property (nonatomic, copy) NSString *labelText __attribute__((deprecated("Use label.text instead."))); |
|
|
|
@property (nonatomic, strong) UIFont *labelFont __attribute__((deprecated("Use label.font instead."))); |
|
|
|
@property (nonatomic, strong) UIColor *labelColor __attribute__((deprecated("Use label.textColor instead."))); |
|
|
|
@property (nonatomic, copy) NSString *detailsLabelText __attribute__((deprecated("Use detailsLabel.text instead."))); |
|
|
|
@property (nonatomic, strong) UIFont *detailsLabelFont __attribute__((deprecated("Use detailsLabel.font instead."))); |
|
|
|
@property (nonatomic, strong) UIColor *detailsLabelColor __attribute__((deprecated("Use detailsLabel.textColor instead."))); |
|
|
|
@property (assign, nonatomic) CGFloat opacity __attribute__((deprecated("Customize bezelView properties instead."))); |
|
|
|
@property (strong, nonatomic) UIColor *color __attribute__((deprecated("Customize the bezelView color instead."))); |
|
|
|
@property (assign, nonatomic) CGFloat xOffset __attribute__((deprecated("Set offset.x instead."))); |
|
|
|
@property (assign, nonatomic) CGFloat yOffset __attribute__((deprecated("Set offset.y instead."))); |
|
|
|
@property (assign, nonatomic) CGFloat cornerRadius __attribute__((deprecated("Set bezelView.layer.cornerRadius instead."))); |
|
|
|
@property (assign, nonatomic) BOOL dimBackground __attribute__((deprecated("Customize HUD background properties instead."))); |
|
|
|
@property (strong, nonatomic) UIColor *activityIndicatorColor __attribute__((deprecated("Use UIAppearance to customize UIActivityIndicatorView. E.g.: [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil].color = [UIColor redColor];"))); |
|
|
|
@property (atomic, assign, readonly) CGSize size __attribute__((deprecated("Get the bezelView.frame.size instead."))); |
|
|
|
|
|
|
|
@end |
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_END |