MBProgressHUD README

The project's README from github.com/jdg/MBProgressHUD. As one markdown file: README.md.

MBProgressHUD

Build Status codecov.io SwiftPM compatible Carthage compatible Accio supported CocoaPods compatible License: MIT

MBProgressHUD is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private UIKit UIProgressHUD with some additional features.

Requirements

MBProgressHUD works on iOS 9.0+. It depends on the following Apple frameworks, which should already be included with most Xcode templates:

You will need the latest developer tools in order to build MBProgressHUD. Old Xcode versions might work, but compatibility will not be explicitly maintained.

Adding MBProgressHUD to your project

CocoaPods

CocoaPods is the recommended way to add MBProgressHUD to your project.

  1. Add a pod entry for MBProgressHUD to your Podfile pod 'MBProgressHUD', '~> 1.2.0'
  2. Install the pod(s) by running pod install.
  3. Include MBProgressHUD wherever you need it with #import "MBProgressHUD.h".

Carthage

  1. Add MBProgressHUD to your Cartfile. e.g., github "jdg/MBProgressHUD" ~> 1.2.0
  2. Run carthage update
  3. Follow the rest of the standard Carthage installation instructions to add MBProgressHUD to your project.

SwiftPM / Accio

  1. Add the following to your Package.swift:
    .package(url: "https://github.com/jdg/MBProgressHUD.git", .upToNextMajor(from: "1.2.0")),
    
  2. Next, add MBProgressHUD to your App targets dependencies like so:
    .target(name: "App", dependencies: ["MBProgressHUD"]),
    
  3. Then open your project in Xcode 11+ (SwiftPM) or run accio update (Accio).

Source files

Alternatively you can directly add the MBProgressHUD.h and MBProgressHUD.m source files to your project.

  1. Download the latest code version or add the repository as a git submodule to your git-tracked project.
  2. Open your project in Xcode, then drag and drop MBProgressHUD.h and MBProgressHUD.m onto your project (use the "Product Navigator view"). Make sure to select Copy items when asked if you extracted the code archive outside of your project.
  3. Include MBProgressHUD wherever you need it with #import "MBProgressHUD.h".

Static library

You can also add MBProgressHUD as a static library to your project or workspace.

  1. Download the latest code version or add the repository as a git submodule to your git-tracked project.
  2. Open your project in Xcode, then drag and drop MBProgressHUD.xcodeproj onto your project or workspace (use the "Product Navigator view").
  3. Select your target and go to the Build phases tab. In the Link Binary With Libraries section select the add button. On the sheet find and add libMBProgressHUD.a. You might also need to add MBProgressHUD to the Target Dependencies list.
  4. Include MBProgressHUD wherever you need it with #import <MBProgressHUD/MBProgressHUD.h>.

Usage

The main guideline you need to follow when dealing with MBProgressHUD while running long-running tasks is keeping the main thread work-free, so the UI can be updated promptly. The recommended way of using MBProgressHUD is therefore to set it up on the main thread and then spinning the task, that you want to perform, off onto a new thread.

[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
	// Do something...
	dispatch_async(dispatch_get_main_queue(), ^{
		[MBProgressHUD hideHUDForView:self.view animated:YES];
	});
});

You can add the HUD on any view or window. It is however a good idea to avoid adding the HUD to certain UIKit views with complex view hierarchies - like UITableView or UICollectionView. Those can mutate their subviews in unexpected ways and thereby break HUD display.

If you need to configure the HUD you can do this by using the MBProgressHUD reference that showHUDAddedTo:animated: returns.

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Loading";
[self doSomethingInBackgroundWithProgressCallback:^(float progress) {
	hud.progress = progress;
} completionCallback:^{
	[hud hideAnimated:YES];
}];

You can also use a NSProgress object and MBProgressHUD will update itself when there is progress reported through that object.

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.label.text = @"Loading";
NSProgress *progress = [self doSomethingInBackgroundCompletion:^{
	[hud hideAnimated:YES];
}];
hud.progressObject = progress;

Keep in mind that UI updates, including calls to MBProgressHUD should always be done on the main thread.

If you need to run your long-running task in the main thread, you should perform it with a slight delay, so UIKit will have enough time to update the UI (i.e., draw the HUD) before you block the main thread with your task.

[MBProgressHUD showHUDAddedTo:self.view animated:YES];
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
	// Do something...
	[MBProgressHUD hideHUDForView:self.view animated:YES];
});

You should be aware that any HUD updates issued inside the above block won't be displayed until the block completes.

For more examples, including how to use MBProgressHUD with asynchronous operations such as NSURLConnection, take a look at the bundled demo project. Extensive API documentation is provided in the header file (MBProgressHUD.h).

License

This code is distributed under the terms and conditions of the MIT license.

Change-log

A brief summary of each MBProgressHUD release can be found in the CHANGELOG.

Privacy

MBProgressHUD does not collect any data. See SDK Privacy Practices for more information.

MBProgressHUD (jdg/MBProgressHUD)

Searching Database…

这是什么?MBProgressHUD 是一个 iOS 上的即插即用类,可以在后台线程执行任务时,在界面之上显示一个半透明的 HUD(提示框),带进度指示器和/或文字说明。
它是要添加到应用代码里的库,还是可以独立运行的东西?它是一个库——本质上就是一个 Objective-C 类(MBProgressHUD.h/.m),直接放进 iOS 项目即可。它支持 iOS 9.0 及以上版本,只依赖 Xcode 模板已经自带的 Apple 系统框架。
怎么把它加到我的项目里?推荐用 CocoaPods:在 Podfile 中添加 pod 'MBProgressHUD', '~> 1.2.0',然后运行 pod install。也可以用 Carthage、SwiftPM/Accio、直接把这两个源文件拖进 Xcode,或者作为静态库添加。
我需要先安装什么第三方依赖吗?不需要——它只依赖 Foundation、UIKit 和 CoreGraphics,这些都随 Xcode 模板自带。不过你需要较新的开发工具:旧版本的 Xcode 或许也能用,但官方并不保证兼容。
显示 HUD 时有什么要注意的坑?不要让主线程忙于耗时操作:HUD 要在主线程上设置,而把耗时的任务放到后台线程去执行。另外,不要把它加到 UITableView 或 UICollectionView 上,因为这两个控件的子视图变动会破坏 HUD 的显示。
MBProgressHUD 会收集用户数据吗?不会,该 SDK 不收集任何数据。
它能显示真实进度,而不只是转圈动画吗?可以——传入一个 NSProgress 对象,HUD 会随着进度的上报自动更新。你还可以用 showHUDAddedTo:animated: 返回的引用来配置 HUD。
和 UIKit 自带的进度视图相比,为什么要用这个?UIKit 自带的 UIProgressHUD 是私有且未公开的 API,所以系统并没有官方支持的替代品。MBProgressHUD 就是为了作为受支持的替代方案而写的,还额外增加了一些功能。
文档和示例代码在哪里?详细的 API 文档就在头文件(MBProgressHUD.h)里,自带的 demo 项目提供了各种示例,包括把 HUD 用于 NSURLConnection 这类异步操作。
我能在 Swift 里用它吗?可以——它是一个 Objective-C 类,可以导入到 Swift 项目中使用,SwiftPM 和 CocoaPods、Carthage 一样,都是受支持的包管理工具。
Creator
jdg
Size
1.2 MB
Stars
15.9K
Updated
CommitMay 10
Age
17y
Commits · 90 Days