123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- //
- // MBProgressHUD.h
- // Version 0.8
- // Created by Matej Bukovinski on 2.4.09.
- //
- // This code is distributed under the terms and conditions of the MIT license.
- // Copyright (c) 2013 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>
- @protocol MBProgressHUDDelegate;
- typedef enum {
- /** Progress is shown using an UIActivityIndicatorView. This is the default. */
- MBProgressHUDModeIndeterminate,
- /** Progress is shown using a round, pie-chart like, progress view. */
- MBProgressHUDModeDeterminate,
- /** Progress is shown using a horizontal progress bar */
- MBProgressHUDModeDeterminateHorizontalBar,
- /** Progress is shown using a ring-shaped progress view. */
- MBProgressHUDModeAnnularDeterminate,
- /** Shows a custom view */
- MBProgressHUDModeCustomView,
- /** Shows only labels */
- MBProgressHUDModeText
- } MBProgressHUDMode;
- typedef enum {
- /** Opacity animation */
- MBProgressHUDAnimationFade,
- /** Opacity + scale animation */
- MBProgressHUDAnimationZoom,
- MBProgressHUDAnimationZoomOut = MBProgressHUDAnimationZoom,
- MBProgressHUDAnimationZoomIn
- } MBProgressHUDAnimation;
- #ifndef MB_INSTANCETYPE
- #if __has_feature(objc_instancetype)
- #define MB_INSTANCETYPE instancetype
- #else
- #define MB_INSTANCETYPE id
- #endif
- #endif
- #ifndef MB_STRONG
- #if __has_feature(objc_arc)
- #define MB_STRONG strong
- #else
- #define MB_STRONG retain
- #endif
- #endif
- #ifndef MB_WEAK
- #if __has_feature(objc_arc_weak)
- #define MB_WEAK weak
- #elif __has_feature(objc_arc)
- #define MB_WEAK unsafe_unretained
- #else
- #define MB_WEAK assign
- #endif
- #endif
- #if NS_BLOCKS_AVAILABLE
- typedef void (^MBProgressHUDCompletionBlock)();
- #endif
- /**
- * 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. The HUD itself is
- * drawn centered as a rounded semi-transparent view which resizes depending on the user specified content.
- *
- * This view supports four modes of operation:
- * - MBProgressHUDModeIndeterminate - shows a UIActivityIndicatorView
- * - MBProgressHUDModeDeterminate - shows a custom round progress indicator
- * - MBProgressHUDModeAnnularDeterminate - shows a custom annular progress indicator
- * - MBProgressHUDModeCustomView - shows an arbitrary, user specified view (@see customView)
- *
- * All three modes can have optional labels assigned:
- * - If the labelText property is set and non-empty then a label containing the provided content is placed below the
- * indicator view.
- * - If also the detailsLabelText property is set then another label is placed below the first label.
- */
- @interface MBProgressHUD : UIView
- /**
- * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:.
- *
- * @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
- */
- + (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;
- /**
- * Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:.
- *
- * @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 all the HUD subviews and hides them.
- *
- * @param view The view that is going to be searched for HUD subviews.
- * @param animated If set to YES the HUDs will disappear using the current animationType. If set to NO the HUDs will not use
- * animations while disappearing.
- * @return the number of HUDs found and removed.
- *
- * @see hideHUDForView:animated:
- * @see animationType
- */
- + (NSUInteger)hideAllHUDsForView:(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.
- */
- + (MB_INSTANCETYPE)HUDForView:(UIView *)view;
- /**
- * Finds all HUD subviews and returns them.
- *
- * @param view The view that is going to be searched.
- * @return All found HUD views (array of MBProgressHUD objects).
- */
- + (NSArray *)allHUDsForView:(UIView *)view;
- /**
- * A convenience constructor that initializes the HUD with the window's bounds. Calls the designated constructor with
- * window.bounds as the parameter.
- *
- * @param window The window instance that will provide the bounds for the HUD. Should be the same instance as
- * the HUD's superview (i.e., the window that the HUD will be added to).
- */
- - (id)initWithWindow:(UIWindow *)window;
- /**
- * 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).
- */
- - (id)initWithView:(UIView *)view;
- /**
- * Display the HUD. You need to make sure that the main thread completes its run loop soon after this method call so
- * 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 calling 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)show:(BOOL)animated;
- /**
- * Hide 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)hide:(BOOL)animated;
- /**
- * Hide 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)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;
- /**
- * Shows the HUD while a background task is executing in a new thread, then hides the HUD.
- *
- * This method also takes care of autorelease pools so your method does not have to be concerned with setting up a
- * pool.
- *
- * @param method The method to be executed while the HUD is shown. This method will be executed in a new thread.
- * @param target The object that the target method belongs to.
- * @param object An optional object to be passed to the method.
- * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will not use
- * animations while (dis)appearing.
- */
- - (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated;
- #if NS_BLOCKS_AVAILABLE
- /**
- * Shows the HUD while a block is executing on a background queue, then hides the HUD.
- *
- * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
- */
- - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block;
- /**
- * Shows the HUD while a block is executing on a background queue, then hides the HUD.
- *
- * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
- */
- - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion;
- /**
- * Shows the HUD while a block is executing on the specified dispatch queue, then hides the HUD.
- *
- * @see showAnimated:whileExecutingBlock:onQueue:completionBlock:
- */
- - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue;
- /**
- * Shows the HUD while a block is executing on the specified dispatch queue, executes completion block on the main queue, and then hides the HUD.
- *
- * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will
- * not use animations while (dis)appearing.
- * @param block The block to be executed while the HUD is shown.
- * @param queue The dispatch queue on which the block should be executed.
- * @param completion The block to be executed on completion.
- *
- * @see completionBlock
- */
- - (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue
- completionBlock:(MBProgressHUDCompletionBlock)completion;
- /**
- * A block that gets called after the HUD was completely hidden.
- */
- @property (copy) MBProgressHUDCompletionBlock completionBlock;
- #endif
- /**
- * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate.
- *
- * @see MBProgressHUDMode
- */
- @property (assign) MBProgressHUDMode mode;
- /**
- * The animation type that should be used when the HUD is shown and hidden.
- *
- * @see MBProgressHUDAnimation
- */
- @property (assign) MBProgressHUDAnimation animationType;
- /**
- * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView.
- * For best results use a 37 by 37 pixel view (so the bounds match the built in indicator bounds).
- */
- @property (MB_STRONG) UIView *customView;
- /**
- * The HUD delegate object.
- *
- * @see MBProgressHUDDelegate
- */
- @property (MB_WEAK) id<MBProgressHUDDelegate> delegate;
- /**
- * An optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit
- * the entire text. If the text is too long it will get clipped by displaying "..." at the end. If left unchanged or
- * set to @"", then no message is displayed.
- */
- @property (copy) NSString *labelText;
- /**
- * An optional details message displayed below the labelText message. This message is displayed only if the labelText
- * property is also set and is different from an empty string (@""). The details text can span multiple lines.
- */
- @property (copy) NSString *detailsLabelText;
- /**
- * The opacity of the HUD window. Defaults to 0.8 (80% opacity).
- */
- @property (assign) float opacity;
- /**
- * The color of the HUD window. Defaults to black. If this property is set, color is set using
- * this UIColor and the opacity property is not used. using retain because performing copy on
- * UIColor base colors (like [UIColor greenColor]) cause problems with the copyZone.
- */
- @property (MB_STRONG) UIColor *color;
- /**
- * The x-axis offset of the HUD relative to the centre of the superview.
- */
- @property (assign) float xOffset;
- /**
- * The y-axis offset of the HUD relative to the centre of the superview.
- */
- @property (assign) float yOffset;
- /**
- * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views).
- * Defaults to 20.0
- */
- @property (assign) float margin;
- /**
- * Cover the HUD background view with a radial gradient.
- */
- @property (assign) BOOL dimBackground;
- /*
- * 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).
- * Grace time functionality is only supported when the task status is known!
- * @see taskInProgress
- */
- @property (assign) float 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) float minShowTime;
- /**
- * Indicates that the executed operation is in progress. Needed for correct graceTime operation.
- * If you don't set a graceTime (different than 0.0) this does nothing.
- * This property is automatically set when using showWhileExecuting:onTarget:withObject:animated:.
- * When threading is done outside of the HUD (i.e., when the show: and hide: methods are used directly),
- * you need to set this property when your task starts and completes in order to have normal graceTime
- * functionality.
- */
- @property (assign) BOOL taskInProgress;
- /**
- * Removes the HUD from its parent view when hidden.
- * Defaults to NO.
- */
- @property (assign) BOOL removeFromSuperViewOnHide;
- /**
- * Font to be used for the main label. Set this property if the default is not adequate.
- */
- @property (MB_STRONG) UIFont* labelFont;
- /**
- * Font to be used for the details label. Set this property if the default is not adequate.
- */
- @property (MB_STRONG) UIFont* detailsLabelFont;
- /**
- * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0.
- */
- @property (assign) float progress;
- /**
- * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size).
- */
- @property (assign) CGSize minSize;
- /**
- * Force the HUD dimensions to be equal if possible.
- */
- @property (assign, getter = isSquare) BOOL square;
- @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, MB_STRONG) UIColor *progressTintColor;
- /**
- * Indicator background (non-progress) color.
- * Defaults to translucent white (alpha 0.1)
- */
- @property (nonatomic, MB_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, MB_STRONG) UIColor *lineColor;
- /**
- * Bar background color.
- * Defaults to clear [UIColor clearColor];
- */
- @property (nonatomic, MB_STRONG) UIColor *progressRemainingColor;
- /**
- * Bar progress color.
- * Defaults to white [UIColor whiteColor].
- */
- @property (nonatomic, MB_STRONG) UIColor *progressColor;
- @end
|