// // ZMBProgressHUD.h // Version 1.1.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> @class MBBackgroundView; @protocol ZMBProgressHUDDelegate; extern CGFloat const MBProgressMaxOffset; typedef NS_ENUM(NSInteger, ZMBProgressHUDMode) { /// UIActivityIndicatorView. ZMBProgressHUDModeIndeterminate, /// A round, pie-chart like, progress view. ZMBProgressHUDModeDeterminate, /// Horizontal progress bar. ZMBProgressHUDModeDeterminateHorizontalBar, /// Ring-shaped progress view. ZMBProgressHUDModeAnnularDeterminate, /// Shows a custom view. ZMBProgressHUDModeCustomView, /// Shows only labels. ZMBProgressHUDModeText }; typedef NS_ENUM(NSInteger, ZMBProgressHUDAnimation) { /// Opacity animation ZMBProgressHUDAnimationFade, /// Opacity + scale animation (zoom in when appearing zoom out when disappearing) ZMBProgressHUDAnimationZoom, /// Opacity + scale animation (zoom out style) ZMBProgressHUDAnimationZoomOut, /// Opacity + scale animation (zoom in style) ZMBProgressHUDAnimationZoomIn }; typedef NS_ENUM(NSInteger, ZMBProgressHUDBackgroundStyle) { /// Solid color background ZMBProgressHUDBackgroundStyleSolidColor, /// UIViHuanYuBaolEffectView or UIToolbar.layer background view ZMBProgressHUDBackgroundStyleBlur }; typedef void (^MBProgressHUDCompletionBlock)(void); NS_ASSUME_NONNULL_BEGIN /** * 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 ZMBProgressHUD 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 ZMBProgressHUD is a UI class and should therefore only be accessed on the main thread. */ @interface ZMBProgressHUD : 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 that hasn't finished 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 that hasn't finished and returns it. * * @param view The view that is going to be searched. * @return A reference to the last HUD subview discovered. */ + (nullable ZMBProgressHUD *)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 notiHuanYuBaoations. */ @property (weak, nonatomic) id<ZMBProgressHUDDelegate> 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). * @note The graceTime needs to be set before the hud is shown. You thus can't use `showHUDAddedTo:animated:`, * but instead need to alloc / init the HUD, configure the grace time and than show it manually. */ @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 /** * ZMBProgressHUD operation mode. The default is ZMBProgressHUDModeIndeterminate. */ @property (assign, nonatomic) ZMBProgressHUDMode 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) ZMBProgressHUDAnimation 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 ZMBProgressHUDModeCustomView. * 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 ZMBProgressHUDDelegate <NSObject> @optional /** * Called after the HUD was fully hidden from the screen. */ - (void)hudWasHidden:(ZMBProgressHUD *)hud; @end /** * A progress view for showing definite progress by filling up a circle (pie chart). */ @interface ZMBRoundProgressView : 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 ZMBBarProgressView : 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 ZMBProgressHUDBackgroundStyleBlur on iOS 7 or later and ZMBProgressHUDBackgroundStyleSolidColor otherwise. * @note Due to iOS 7 not supporting UIViHuanYuBaolEffectView, the blur effect differs slightly between iOS 7 and later versions. */ @property (nonatomic) ZMBProgressHUDBackgroundStyle style; #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV /** * The blur effect style, when using ZMBProgressHUDBackgroundStyleBlur. * Defaults to UIBlurEffectStyleLight. */ @property (nonatomic) UIBlurEffectStyle blurEffectStyle; #endif /** * The background color or the blur tint color. * @note Due to iOS 7 not supporting UIViHuanYuBaolEffectView, the blur effect differs slightly between iOS 7 and later versions. */ @property (nonatomic, strong) UIColor *color; @end NS_ASSUME_NONNULL_END