首页 > 代码库 > 开源类库之三(MPProgressHUD)

开源类库之三(MPProgressHUD)

MPProgressHUD是一个非常好用的进度指示器类库,其提供了苹果官方sdk没有提供的progress indicator接口,且提供多种样式,使用方法简便。

首先将类库文件添加到项目中。

使用实例代码如下:

[cpp] view plaincopy
  1. #import <UIKit/UIKit.h>  
  2. #import "MBProgressHUD.h"  
[cpp] view plaincopy
  1. #import <libkern/OSAtomic.h>  
  2. @interface SampleViewController : UITableViewController <MBProgressHUDDelegate>  
  3. @property (nonatomic, retain) NSCondition* condition;  
  4. @property (nonatomic, retain) MBProgressHUD* hud;  
  5. @end  
  6.   
  7. static volatile NSInteger WAITING_RESPONSE_FOR_SERVERRESPONSE = 0;  
  8.   
  9. - (void) popOutMBProgressHUD;  
  10. - (void) selectorForMPProgressHUD;  
  11. - (void) notifyMPProgressHUDToDisappear;  
  12.   
  13. @implementation SampleViewController  
  14. @synthesize hud = _hud;  
  15. @synthesize condition = _condition;  
  16.   
  17. - (id) initWithCoder:(NSCoder *)aDecoder  
  18. {  
  19.     self = [super initWithCoder: aDecoder];  
  20.     if (self != nil) {  
  21.         _hud = nil;  
  22.         _condition = [[NSCondition alloc] init];  
  23.     }  
  24.     return self;  
  25. }  
  26.   
  27. - (void) dealloc  
  28. {  
  29.     [_hud release];  
  30.     [_condition release];  
  31. }  
  32.   
  33. - (void) popOutMBProgressHUD  
  34. {  
  35.     MBProgressHUD* tempHud = [[MBProgressHUD alloc] initWithView:self.navigationController.view];  
  36.     self.hud = tempHud;  
  37.     [self.navigationController.view addSubview: tempHud];  
  38.       
  39.     self.hud.dimBackground = YES;  
  40.     self.hud.delegate = self;  
  41.     self.hud.labelText = @"正在处理";  
  42.     [self.hud showWhileExecuting:@selector(selectorForMPProgressHUD) onTarget:self withObject: nil animated:YES];  
  43.     [tempHud release];  
  44. }  
  45.   
  46. - (void) selectorForMPProgressHUD  
  47. {  
  48.     OSAtomicCompareAndSwapInt(0,   
  49.                               1,   
  50.                               &WAITING_RESPONSE_FOR_SERVERRESPONSE);  
  51.     [self performSelectorInBackground: @selector(tempSelector) withObject: nil];  
  52.     [self.condition lock];  
  53.     while (OSAtomicCompareAndSwapInt(1,   
  54.                                      1,   
  55.                                      &WAITING_RESPONSE_FOR_SERVERRESPONSE)) {  
  56.         NSDate* timeOutDate = [NSDate dateWithTimeIntervalSinceNow: 5.0f];  
  57.         [self.condition waitUntilDate: timeOutDate];  
  58.     }  
  59.     [self.condition unlock];       
  60. }  
  61.   
  62. - (void) notifyMPProgressHUDToDisappear  
  63. {  
  64.     //通知进度显示hud消失  
  65.     [self.condition lock];  
  66.     OSAtomicCompareAndSwapInt(1,   
  67.                               0,   
  68.                               &WAITING_RESPONSE_FOR_SERVERRESPONSE);  
  69.     [self.condition signal];  
  70.     [self.condition unlock];     
  71. }  
[cpp] view plaincopy
  1. - (void)hudWasHidden:(MBProgressHUD *)hud   
  2. {  
  3.     // Remove HUD from screen when the HUD was hidded  
  4.     [self.hud removeFromSuperview];  
  5.     self.hud = nil;  
  6. }  
  7.   
  8. - (void) tempSelector  
  9. {   
  10.     sleep(3.0f);//模拟真实的耗时操作   
  11.     [self notifyMPProgressHUDToDisappear];  
  12. }  
  13.   
  14. @end  

开源类库之三(MPProgressHUD)