`
dcj3sjt126com
  • 浏览: 1867081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

提示框第三方库之MBProgressHUD

    博客分类:
  • IOS
 
阅读更多

MBProgressHUD Build Status

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 any iOS version and is compatible with both ARC and non-ARC projects. It depends on the following Apple frameworks, which should already be included with most Xcode templates:

  • Foundation.framework
  • UIKit.framework
  • CoreGraphics.framework

You will need LLVM 3.0 or later in order to build MBProgressHUD.

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', '~> 0.6'
  2. Install the pod(s) by running pod install.
  3. Include MBProgressHUD wherever you need it with #import "MBProgressHUD.h".

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];
    });
});

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.labelText = @"Loading";
[self doSomethingInBackgroundWithProgressCallback:^(float progress) {
    hud.progress = progress;
} completionCallback:^{
    [hud hide:YES];
}];

UI updates should always be done on the main thread. Some MBProgressHUD setters are however considered "thread safe" and can be called from background threads. Those also include setMode:setCustomView:setLabelText:setLabelFont:,setDetailsLabelText:setDetailsLabelFont: and setProgress:.

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

Version 0.6 @ 13.03.13

  • Full cocoapods support.
  • Static library integration option.
  • Improved blocks support.
  • Bezel color.
  • Demo app fixes (iOS 6).
  • Various bug-fixes and enhancements.

Version 0.5 @ 22.03.12

  • Major source code modernization and cleanup (KVO, layout code, instance vars, etc.).
  • New annular determinate mode.
  • New text only mode.
  • Added a static library project and Xcode 4 workspace.
  • Added methods to find and return HUD(s) on a view.
  • Various bug fixes.
  • Various demo project enhancements (hi-res rescues, new samples).

IMPORTANT: Requires LLVM 3+.

Version 0.41 @ 03.01.12

  • Support for ARC.

Version 0.4 @ 25.07.10

Version 0.33 @ 27.03.10

  • Custom view operation mode added.
  • Fixed a memory leak.

Version 0.32 @ 4.01.10

  • Added minShowTime, graceTime, xOffset, yOffset.
  • Various fixes.

Version 0.31 @ 8.10.09

  • Fix for touch through during the fade-out animation.

Version 0.3 @ 30.9.09

  • Added show: and hide: methods.
  • Now using UIViews layoutSubviews to automate layout calls.
  • Added some floors to round pixel positions and thereby prevent unsharp views.
  • Some additional documentation and code cleanup.

Version 0.2 @ 21.7.09

  • Added determinate progress mode and switching capabilities between determinate and indeterminate modes.
  • Various bug-fixes.

Version 0.11 @ 2.6.09.

  • Updated labelText and detailsLabelText properties to support text modifications while the HUD is being shown.

Version 0.1 @ 2.4.09

  • Initial release.

 

MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单、方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到。到GitHub上可以下载到项目源码https://github.com/jdg/MBProgressHUD,下载下来后直接把MBProgressHUD.h和MBProgressHUD.m拖入工程中就行,别忘了选择拷贝到工程。完了在需要使用的地方导入头文件就可以开始使用了。首先看下工程截图:

                                                                

 

接下来是整个Demo的完整界面,这里我只选择出了几个常用的对话框,其他样式的在源码提供的Demo里可以找到,要用的话直接参考就可以。

                                                                        

接下来直接上代码了,头文件部分:

 

  1. #import <UIKit/UIKit.h>  
  2. #import "MBProgressHUD.h"  
  3.   
  4. @interface ViewController : UIViewController  
  5. {  
  6.     //HUD(Head-Up Display,意思是抬头显示的意思)  
  7.     MBProgressHUD *HUD;  
  8. }  
  9.   
  10. - (IBAction)showTextDialog:(id)sender;  
  11. - (IBAction)showProgressDialog:(id)sender;  
  12. - (IBAction)showProgressDialog2:(id)sender;  
  13. - (IBAction)showCustomDialog:(id)sender;  
  14. - (IBAction)showAllTextDialog:(id)sender;  
  15.   
  16. @end  


实现文件(按钮实现部分):

 

 

  1. - (IBAction)showTextDialog:(id)sender {  
  2.     //初始化进度框,置于当前的View当中  
  3.     HUD = [[MBProgressHUD alloc] initWithView:self.view];  
  4.     [self.view addSubview:HUD];  
  5.       
  6.     //如果设置此属性则当前的view置于后台  
  7.     HUD.dimBackground = YES;  
  8.       
  9.     //设置对话框文字  
  10.     HUD.labelText = @"请稍等";  
  11.       
  12.     //显示对话框  
  13.     [HUD showAnimated:YES whileExecutingBlock:^{  
  14.         //对话框显示时需要执行的操作  
  15.         sleep(3);  
  16.     } completionBlock:^{  
  17.         //操作执行完后取消对话框  
  18.         [HUD removeFromSuperview];  
  19.         [HUD release];  
  20.         HUD = nil;  
  21.     }];  
  22. }  
  23.   
  24. - (IBAction)showProgressDialog:(id)sender {  
  25.     HUD = [[MBProgressHUD alloc] initWithView:self.view];  
  26.     [self.view addSubview:HUD];  
  27.     HUD.labelText = @"正在加载";  
  28.       
  29.     //设置模式为进度框形的  
  30.     HUD.mode = MBProgressHUDModeDeterminate;  
  31.     [HUD showAnimated:YES whileExecutingBlock:^{  
  32.         float progress = 0.0f;  
  33.         while (progress < 1.0f) {  
  34.             progress += 0.01f;  
  35.             HUD.progress = progress;  
  36.             usleep(50000);  
  37.         }  
  38.     } completionBlock:^{  
  39.         [HUD removeFromSuperview];  
  40.         [HUD release];  
  41.         HUD = nil;  
  42.     }];  
  43. }  
  44.   
  45. - (IBAction)showProgressDialog2:(id)sender {  
  46.     HUD = [[MBProgressHUD alloc] initWithView:self.view];  
  47.     [self.view addSubview:HUD];  
  48.     HUD.labelText = @"正在加载";  
  49.     HUD.mode = MBProgressHUDModeAnnularDeterminate;  
  50.       
  51.     [HUD showAnimated:YES whileExecutingBlock:^{  
  52.         float progress = 0.0f;  
  53.         while (progress < 1.0f) {  
  54.             progress += 0.01f;  
  55.             HUD.progress = progress;  
  56.             usleep(50000);  
  57.         }  
  58.     } completionBlock:^{  
  59.         [HUD removeFromSuperview];  
  60.         [HUD release];  
  61.         HUD = nil;  
  62.     }];  
  63. }  
  64.   
  65. - (IBAction)showCustomDialog:(id)sender {  
  66.     HUD = [[MBProgressHUD alloc] initWithView:self.view];  
  67.     [self.view addSubview:HUD];  
  68.     HUD.labelText = @"操作成功";  
  69.     HUD.mode = MBProgressHUDModeCustomView;  
  70.     HUD.customView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Checkmark"]] autorelease];  
  71.     [HUD showAnimated:YES whileExecutingBlock:^{  
  72.         sleep(2);  
  73.     } completionBlock:^{  
  74.         [HUD removeFromSuperview];  
  75.         [HUD release];  
  76.         HUD = nil;  
  77.     }];  
  78.       
  79. }  
  80.   
  81. - (IBAction)showAllTextDialog:(id)sender {  
  82.     HUD = [[MBProgressHUD alloc] initWithView:self.view];  
  83.     [self.view addSubview:HUD];  
  84.     HUD.labelText = @"操作成功";  
  85.     HUD.mode = MBProgressHUDModeText;  
  86.       
  87.     //指定距离中心点的X轴和Y轴的偏移量,如果不指定则在屏幕中间显示  
  88. //    HUD.yOffset = 150.0f;  
  89. //    HUD.xOffset = 100.0f;  
  90.       
  91.     [HUD showAnimated:YES whileExecutingBlock:^{  
  92.         sleep(2);  
  93.     } completionBlock:^{  
  94.         [HUD removeFromSuperview];  
  95.         [HUD release];  
  96.         HUD = nil;  
  97.     }];  
  98. }  


依次实现的效果如下:

 

                          

 

                          

下面这个效果就类似Android中的Toast:

                                                     

以上就简单介绍了MBProgressHUD的使用,这里都是采用block的形式来操作的,这样写起代码来更直观也更高效。

分享到:
评论

相关推荐

    iOS--MBProgressHUD第三方

    在这种场景下,MBProgressHUD是一个非常实用的第三方库,它提供了一种优雅的方式来展示进度指示器或者活动指示器。这个库使得开发者能够快速、简单地在应用中添加这种功能,而不需要花费大量时间自定义视图。 ...

    iOS开发常用的第三方库

    在iOS应用开发中,使用第三方库能够极大地提升开发效率,减少重复劳动,并提供更丰富的功能。以下是一些iOS开发中常用的第三方库,它们涵盖了界面刷新、网络请求、自动适配等多个方面。 1. **界面刷新**: - **...

    ios-自己定义的加载框,类似于MBProgressHUD..zip

    `MBProgressHUD`是一个广泛使用的第三方库,它提供了一种优雅的方式来展示加载指示器和进度条。然而,有时候我们可能需要根据自己的需求定制更符合应用风格的加载效果。标题"ios-自己定义的加载框,类似于...

    swift-iOS提示框

    3. MBProgressHUD:这是一个流行的第三方库,提供了丰富的自定义提示框功能,包括进度条、文本信息和图标等。 4. SVProgressHUD:另一个受欢迎的第三方库,提供简洁、易于使用的API来显示加载、成功、错误等提示...

    MBProgressHUD使用备忘录

    源码阅读有助于提高对第三方库的掌握程度,也便于你在遇到问题时进行调试或优化。 总之,MBProgressHUD 是一个强大且易用的进度指示器库,它的广泛应用证明了其在 iOS 开发中的价值。通过学习和实践,开发者可以更...

    ios-MBProgressHUD网络加载视图.zip

    MBProgressHUD是一款在iOS开发中常用的第三方库,它提供了一种优雅的方式来显示进度指示器和活动指示器。这个压缩包文件"ios-MBProgressHUD网络加载视图.zip"很可能是包含了MBProgressHUD库的相关示例代码或者教程,...

    iOS视图提示框

    为此,可以创建自定义UIView或使用第三方库如SVProgressHUD、ProgressHUD等,这些库提供了更多的定制选项,比如动画效果、颜色、字体等。 五、位置与停留时间 在iOS中,提示框的位置通常是固定的,如...

    07-第三方框架1

    本文将深入探讨如何使用第三方API,以及一些常见的iOS第三方开发库。 首先,我们来理解什么是第三方API。API(Application Programming Interface)是应用程序接口,它允许不同的软件系统之间进行交互。第三方API...

    各种第三方类库和类方法

    在iOS开发中,第三方类库和类方法是开发者不可或...使用这些第三方库和类方法,不仅可以提高开发效率,还能让代码更加模块化,易于维护。同时,理解和掌握这些知识点,对于提升iOS开发技能和优化项目架构有着重要作用。

    提示框,加载框

    在iOS中,`UIActivityIndicatorView`和`MBProgressHUD`是常用的加载框组件,而在Android中,可以使用`ProgressBar`或第三方库如`ProgressDialog`。 以"SVProgressHUD"为例,这是一个跨平台的加载框库,适用于iOS和...

    IOS应用源码之【类库与框架】-MBProgressHUD.rar

    《iOS应用源码详解:MBProgressHUD框架的深度剖析》 在iOS开发中,为应用程序添加进度指示器是一项...同时,了解并熟悉这类第三方库的内部实现,有助于我们在遇到类似问题时,能够更快地找到解决方案,提高开发效率。

    ios hud提示框

    三、自定义实现:除了使用第三方库,开发者也可以通过UIKit组件自行创建HUD。这通常涉及使用`UIView`或`UIActivityIndicatorView`来创建提示框,并利用`NSOperationQueue`或`DispatchQueue`进行异步任务管理,以便在...

    ios 常用三方库全

    7. **MBProgressHUD**:一个用于显示加载提示框的库,常用于网络请求或者长时间任务时给用户一个明确的提示。 8. **MWPhotoBrowser**:这是一个简单的图片浏览器组件,支持iOS标准的图片浏览功能,还可以查看用户...

    第三方类,tableview刷新,scrollview,HUD,图片阴影

    总之,这个压缩包可能包含了一些方便的第三方库,用于实现UITableView的刷新功能、ScrollView的滚动处理、显示加载指示器(如MBProgressHUD)以及图片阴影效果。理解并熟练运用这些知识点,能帮助开发者构建更加高效...

    ios开发常用的第三方类库

    在iOS开发中,为了提高开发效率和代码质量,开发者经常使用第三方类库。这些类库提供了许多原生SDK未涵盖的功能,例如...同时,合理使用第三方库能有效提升开发效率,但过度依赖也可能带来维护难题,因此需要适度取舍。

    基于IOS吐司提示框

    在iOS开发中,很多开发者会选择使用第三方库来实现吐司功能,如SVProgressHUD、MBProgressHUD等,这些库提供了丰富的自定义选项和良好的兼容性。不过,如果项目需求简单,且希望保持代码的精简,也可以选择自定义...

    UI基础(提示框).pdf

    - Cocoapods是一个用于管理iOS项目依赖关系的工具,可以简化第三方库的集成。 - 在iOS开发中,除了Objective-C和Swift,还需熟悉Xcode开发环境及相关的开发工具和命令行工具。 5. MBProgressHUD的集成 - 在使用...

    ios常用三方框架

    最后,`CoreData`虽不是第三方框架,但作为苹果提供的数据持久化解决方案,常常与第三方库如`FMDB`(SQLite wrapper)一起使用,以实现更高效的数据管理。 以上只是众多iOS第三方框架中的一部分,每个框架都有其独特...

Global site tag (gtag.js) - Google Analytics