CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like SVProgressHUD in your projects. First, add the following line to your Podfile:
pod 'SVProgressHUD'
If you want to use the latest features of SVProgressHUD use normal external source dependencies.
pod 'SVProgressHUD', :git => 'https://github.com/SVProgressHUD/SVProgressHUD.git'
This pulls from the master branch directly.
Second, install SVProgressHUD into your project:
pod install
Carthage
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate SVProgressHUD into your Xcode project using Carthage, specify it in your Cartfile:
github "SVProgressHUD/SVProgressHUD"
Run carthage bootstrap to build the framework in your repository’s Carthage directory. You can then include it in your target’s carthage copy-frameworks build phase. For more information on this, please see Carthage’s documentation.
Manually
Drag the SVProgressHUD/SVProgressHUD folder into your project.
Take care that SVProgressHUD.bundle is added to Targets->Build Phases->Copy Bundle Resources.
Add the QuartzCore framework to your project.
Swift
Even though SVProgressHUD is written in Objective-C, it can be used in Swift with no hassle. If you use CocoaPods add the following line to your Podfile:
use_frameworks!
If you added SVProgressHUD manually, just add a bridging header file to your project with the SVProgressHUD header included.
Usage
(see sample Xcode project in /Demo)
SVProgressHUD is created as a singleton (i.e. it doesn’t need to be explicitly allocated and instantiated; you directly call [SVProgressHUD method]).
Use SVProgressHUD wisely! Only use it if you absolutely need to perform a task before taking the user forward. Bad use case examples: pull to refresh, infinite scrolling, sending message.
Using SVProgressHUD in your app will usually look as simple as this (using Grand Central Dispatch):
If you’d like to stack HUDs, you can balance out every show call using:
+ (void)popActivity;
The HUD will get dismissed once the popActivity calls will match the number of show calls.
Or show a confirmation glyph before before getting dismissed a little bit later. The display time depends on minimumDismissTimeInterval and the length of the given string.
SVProgressHUD can be customized via the following methods:
+ (void)setDefaultStyle:(SVProgressHUDStyle)style; // default is SVProgressHUDStyleLight
+ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone
+ (void)setDefaultAnimationType:(SVProgressHUDAnimationType)type; // default is SVProgressHUDAnimationTypeFlat
+ (void)setContainerView:(UIView*)containerView; // default is window level
+ (void)setMinimumSize:(CGSize)minimumSize; // default is CGSizeZero, can be used to avoid resizing
+ (void)setRingThickness:(CGFloat)width; // default is 2 pt
+ (void)setRingRadius:(CGFloat)radius; // default is 18 pt
+ (void)setRingNoTextRadius:(CGFloat)radius; // default is 24 pt
+ (void)setCornerRadius:(CGFloat)cornerRadius; // default is 14 pt
+ (void)setBorderColor:(nonnull UIColor*)color; // default is nil
+ (void)setBorderWidth:(CGFloat)width; // default is 0
+ (void)setFont:(UIFont*)font; // default is [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]
+ (void)setForegroundColor:(UIColor*)color; // default is [UIColor blackColor], only used for SVProgressHUDStyleCustom
+ (void)setForegroundImageColor:(nullable UIColor*)color; // default is the same as foregroundColor
+ (void)setBackgroundColor:(UIColor*)color; // default is [UIColor whiteColor], only used for SVProgressHUDStyleCustom
+ (void)setBackgroundLayerColor:(UIColor*)color; // default is [UIColor colorWithWhite:0 alpha:0.4], only used for SVProgressHUDMaskTypeCustom
+ (void)setImageViewSize:(CGSize)size; // default is 28x28 pt
+ (void)setShouldTintImages:(BOOL)shouldTintImages; // default is YES
+ (void)setInfoImage:(UIImage*)image; // default is the bundled info image provided by Freepik
+ (void)setSuccessImage:(UIImage*)image; // default is bundled success image from Freepik
+ (void)setErrorImage:(UIImage*)image; // default is bundled error image from Freepik
+ (void)setViewForExtension:(UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set
+ (void)setGraceTimeInterval:(NSTimeInterval)interval; // default is 0 seconds
+ (void)setMinimumDismissTimeInterval:(NSTimeInterval)interval; // default is 5.0 seconds
+ (void)setMaximumDismissTimeInterval:(NSTimeInterval)interval; // default is CGFLOAT_MAX
+ (void)setFadeInAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds
+ (void)setFadeOutAnimationDuration:(NSTimeInterval)duration; // default is 0.15 seconds
+ (void)setMaxSupportedWindowLevel:(UIWindowLevel)windowLevel; // default is UIWindowLevelNormal
+ (void)setHapticsEnabled:(BOOL)hapticsEnabled; // default is NO
Additionally SVProgressHUD supports the UIAppearance protocol for most of the above methods.
Hint
As standard SVProgressHUD offers two preconfigured styles:
SVProgressHUDStyleLight: White background with black spinner and text
SVProgressHUDStyleDark: Black background with white spinner and text
If you want to use custom colors use setForegroundColor and setBackgroundColor:. These implicitly set the HUD’s style to SVProgressHUDStyleCustom.
Haptic Feedback
For users with newer devices (starting with the iPhone 7), SVProgressHUD can automatically trigger haptic feedback depending on which HUD is being displayed. The feedback maps as follows:
To enable this functionality, use setHapticsEnabled:.
Users with devices prior to iPhone 7 will have no change in functionality.
Notifications
SVProgressHUD posts four notifications via NSNotificationCenter in response to being shown/dismissed:
SVProgressHUDWillAppearNotification when the show animation starts
SVProgressHUDDidAppearNotification when the show animation completes
SVProgressHUDWillDisappearNotification when the dismiss animation starts
SVProgressHUDDidDisappearNotification when the dismiss animation completes
Each notification passes a userInfo dictionary holding the HUD’s status string (if any), retrievable via SVProgressHUDStatusUserInfoKey.
SVProgressHUD also posts SVProgressHUDDidReceiveTouchEventNotification when users touch on the overall screen or SVProgressHUDDidTouchDownInsideNotification when a user touches on the HUD directly. For this notifications userInfo is not passed but the object parameter contains the UIEvent that related to the touch.
App Extensions
When using SVProgressHUD in an App Extension, #define SV_APP_EXTENSIONS to avoid using unavailable APIs. Additionally call setViewForExtension: from your extensions view controller with self.view.
Contributing to this project
If you have feature requests or bug reports, feel free to help out by sending pull requests or by creating new issues. Please take a moment to
review the guidelines written by Nicolas Gallagher:
SVProgressHUD
SVProgressHUD
is a clean and easy-to-use HUD meant to display the progress of an ongoing task on iOS and tvOS.Demo
Try
SVProgressHUD
on Appetize.io.Installation
From CocoaPods
CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like
SVProgressHUD
in your projects. First, add the following line to your Podfile:If you want to use the latest features of
SVProgressHUD
use normal external source dependencies.This pulls from the
master
branch directly.Second, install
SVProgressHUD
into your project:Carthage
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate
SVProgressHUD
into your Xcode project using Carthage, specify it in yourCartfile
:Run
carthage bootstrap
to build the framework in your repository’s Carthage directory. You can then include it in your target’scarthage copy-frameworks
build phase. For more information on this, please see Carthage’s documentation.Manually
SVProgressHUD/SVProgressHUD
folder into your project.SVProgressHUD.bundle
is added toTargets->Build Phases->Copy Bundle Resources
.Swift
Even though
SVProgressHUD
is written in Objective-C, it can be used in Swift with no hassle. If you use CocoaPods add the following line to your Podfile:If you added
SVProgressHUD
manually, just add a bridging header file to your project with theSVProgressHUD
header included.Usage
(see sample Xcode project in
/Demo
)SVProgressHUD
is created as a singleton (i.e. it doesn’t need to be explicitly allocated and instantiated; you directly call[SVProgressHUD method]
).Use
SVProgressHUD
wisely! Only use it if you absolutely need to perform a task before taking the user forward. Bad use case examples: pull to refresh, infinite scrolling, sending message.Using
SVProgressHUD
in your app will usually look as simple as this (using Grand Central Dispatch):Showing the HUD
You can show the status of indeterminate tasks using one of the following:
If you’d like the HUD to reflect the progress of a task, use one of these:
Dismissing the HUD
The HUD can be dismissed using:
If you’d like to stack HUDs, you can balance out every show call using:
The HUD will get dismissed once the popActivity calls will match the number of show calls.
Or show a confirmation glyph before before getting dismissed a little bit later. The display time depends on
minimumDismissTimeInterval
and the length of the given string.Customization
SVProgressHUD
can be customized via the following methods:Additionally
SVProgressHUD
supports theUIAppearance
protocol for most of the above methods.Hint
As standard
SVProgressHUD
offers two preconfigured styles:SVProgressHUDStyleLight
: White background with black spinner and textSVProgressHUDStyleDark
: Black background with white spinner and textIf you want to use custom colors use
setForegroundColor
andsetBackgroundColor:
. These implicitly set the HUD’s style toSVProgressHUDStyleCustom
.Haptic Feedback
For users with newer devices (starting with the iPhone 7),
SVProgressHUD
can automatically trigger haptic feedback depending on which HUD is being displayed. The feedback maps as follows:showSuccessWithStatus:
<->UINotificationFeedbackTypeSuccess
showInfoWithStatus:
<->UINotificationFeedbackTypeWarning
showErrorWithStatus:
<->UINotificationFeedbackTypeError
To enable this functionality, use
setHapticsEnabled:
.Users with devices prior to iPhone 7 will have no change in functionality.
Notifications
SVProgressHUD
posts four notifications viaNSNotificationCenter
in response to being shown/dismissed:SVProgressHUDWillAppearNotification
when the show animation startsSVProgressHUDDidAppearNotification
when the show animation completesSVProgressHUDWillDisappearNotification
when the dismiss animation startsSVProgressHUDDidDisappearNotification
when the dismiss animation completesEach notification passes a
userInfo
dictionary holding the HUD’s status string (if any), retrievable viaSVProgressHUDStatusUserInfoKey
.SVProgressHUD
also postsSVProgressHUDDidReceiveTouchEventNotification
when users touch on the overall screen orSVProgressHUDDidTouchDownInsideNotification
when a user touches on the HUD directly. For this notificationsuserInfo
is not passed but the object parameter contains theUIEvent
that related to the touch.App Extensions
When using
SVProgressHUD
in an App Extension,#define SV_APP_EXTENSIONS
to avoid using unavailable APIs. Additionally callsetViewForExtension:
from your extensions view controller withself.view
.Contributing to this project
If you have feature requests or bug reports, feel free to help out by sending pull requests or by creating new issues. Please take a moment to review the guidelines written by Nicolas Gallagher:
License
SVProgressHUD
is distributed under the terms and conditions of the MIT license. The success, error and info icons are made by Freepik from Flaticon and are licensed under Creative Commons BY 3.0.Credits
SVProgressHUD
is brought to you by Sam Vermette, Tobias Tiemerding and contributors to the project. If you’re usingSVProgressHUD
in your project, attribution would be very appreciated.