关键操作:
效果如下:
ViewController.h
1 #import <UIKit/UIKit.h> 2 #import "MBProgressHUD.h" 3 4 @interface ViewController : UITableViewController<MBProgressHUDDelegate> 5 @property (strong, nonatomic) MBProgressHUD *hud; 6 @property (copy, nonatomic) NSArray *arrMode; 7 @property (copy, nonatomic) NSArray *arrModeName; 8 9 @end
ViewController.m
1 #import "ViewController.h" 2 3 @interface ViewController () 4 - (void)loadData; 5 - (void)layoutUI; 6 - (void)taskOfIndeterminate; 7 - (void)taskOfDeterminate; 8 - (void)taskOfDeterminateHorizontalBar; 9 - (void)taskOfAnnularDeterminate; 10 - (void)taskOfCustomView; 11 - (void)taskOfText; 12 - (void)showHUDByIndeterminate; 13 - (void)showHUDByDeterminate; 14 - (void)showHUDByDeterminateHorizontalBar; 15 - (void)showHUDByAnnularDeterminate; 16 - (void)showHUDByCustomView; 17 - (void)showHUDByText; 18 @end 19 20 @implementation ViewController 21 22 - (void)viewDidLoad { 23 [super viewDidLoad]; 24 25 [self loadData]; 26 [self layoutUI]; 27 } 28 29 - (void)didReceiveMemoryWarning { 30 [super didReceiveMemoryWarning]; 31 // Dispose of any resources that can be recreated. 32 } 33 34 - (void)loadData { 35 _arrMode = @[ @"MBProgressHUDModeIndeterminate", 36 @"MBProgressHUDModeDeterminate", 37 @"MBProgressHUDModeDeterminateHorizontalBar", 38 @"MBProgressHUDModeAnnularDeterminate", 39 @"MBProgressHUDModeCustomView", 40 @"MBProgressHUDModeText" ]; 41 42 _arrModeName = @[ @"UIActivityIndicatorView 来显示进度,这是默认值", 43 @"圆形饼图来显示进度", 44 @"水平进度条来显示进度", 45 @"圆环来显示进度", 46 @"自定义视图;例如通过这种方式,来显示一个正确或错误的提示图", 47 @"只显示文本" ]; 48 } 49 50 - (void)layoutUI { 51 self.navigationItem.title = @"MBProgressHUD 第三方库使用"; 52 } 53 54 #pragma mark - MBProgressHUD Additional Task 55 - (void)taskOfIndeterminate { 56 sleep(3); //进程挂起3秒,这里仅仅是模拟,相当于执行了一些操作耗时3秒;sleep 和 usleep 都是进程挂起操作方法,他们的精准度不同,所以按需使用;对于一般秒级别操作,就使用 sleep 方法 57 } 58 59 - (void)taskOfDeterminate { 60 CGFloat progressVal = 0.0f; 61 while (progressVal < 1.0) { 62 progressVal += 0.1; 63 _hud.progress = progressVal; 64 usleep(500000); //千分之一毫秒,即百万分之一秒;这里设置进程挂起0.5秒 65 } 66 } 67 68 - (void)taskOfDeterminateHorizontalBar { 69 [self taskOfDeterminate]; 70 } 71 72 - (void)taskOfAnnularDeterminate { 73 [self taskOfDeterminate]; 74 } 75 76 - (void)taskOfCustomView { 77 [self taskOfIndeterminate]; 78 } 79 80 - (void)taskOfText { 81 [self taskOfIndeterminate]; 82 } 83 84 #pragma mark - MBProgressHUD 85 - (void)showHUDByIndeterminate { 86 UIColor *color = [UIColor cyanColor]; 87 88 _hud = [[MBProgressHUD alloc] initWithView:self.view]; 89 _hud.activityIndicatorColor = color; //设置指示器颜色;默认为白色 90 91 //label 和 detailsLabel 是公共部分,其他模式的展示效果一样可以用 92 _hud.labelText = @"加载中..."; 93 _hud.labelFont = [UIFont systemFontOfSize:17]; 94 _hud.labelColor = color; //设置文本颜色;默认为白色 95 _hud.detailsLabelText = @"用户请稍候,耐心等待"; 96 _hud.detailsLabelFont = [UIFont systemFontOfSize:14]; 97 _hud.detailsLabelColor = color; //设置详细文本颜色;默认为白色 98 99 //一些额外不常用的设置 100 _hud.minShowTime = 5.0f; 101 _hud.opacity = 0.5f; 102 _hud.animationType = MBProgressHUDAnimationZoomOut; 103 _hud.cornerRadius = 15.0f; 104 _hud.dimBackground = YES; 105 _hud.xOffset = 0.0f; 106 _hud.yOffset = 50.0f; 107 _hud.margin = 30.0f; 108 _hud.square = YES; 109 _hud.minSize = CGSizeMake(240.0f, 200.0f); //设置了 minSize 后,square 就失效了 110 111 //设置委托,以便调用hudWasHidden:方法 112 _hud.delegate = self; 113 [self.view addSubview:_hud]; 114 115 //操作方式一: 116 // [_hud showWhileExecuting:@selector(taskOfIndeterminate) 117 // onTarget:self 118 // withObject:nil 119 // animated:YES]; 120 121 //操作方式二: 122 [_hud showAnimated:YES 123 whileExecutingBlock:^{ 124 [self taskOfIndeterminate]; 125 } completionBlock:^{ 126 NSLog(@"showHUDByIndeterminate 执行完成"); 127 }]; 128 } 129 130 - (void)showHUDByDeterminate { 131 _hud = [[MBProgressHUD alloc] initWithView:self.view]; 132 _hud.mode = MBProgressHUDModeDeterminate; 133 [self.view addSubview:_hud]; 134 135 [_hud showAnimated:YES 136 whileExecutingBlock:^{ 137 [self taskOfDeterminate]; 138 } completionBlock:^{ 139 NSLog(@"showHUDByDeterminate 执行完成"); 140 }]; 141 } 142 143 - (void)showHUDByDeterminateHorizontalBar { 144 _hud = [[MBProgressHUD alloc] initWithView:self.view]; 145 _hud.mode = MBProgressHUDModeDeterminateHorizontalBar; 146 [self.view addSubview:_hud]; 147 148 [_hud showAnimated:YES 149 whileExecutingBlock:^{ 150 [self taskOfDeterminateHorizontalBar]; 151 } completionBlock:^{ 152 NSLog(@"showHUDByDeterminateHorizontalBar 执行完成"); 153 }]; 154 } 155 156 - (void)showHUDByAnnularDeterminate { 157 _hud = [[MBProgressHUD alloc] initWithView:self.view]; 158 _hud.mode = MBProgressHUDModeAnnularDeterminate; 159 [self.view addSubview:_hud]; 160 161 [_hud showAnimated:YES 162 whileExecutingBlock:^{ 163 [self taskOfAnnularDeterminate]; 164 } completionBlock:^{ 165 NSLog(@"showHUDByAnnularDeterminate 执行完成"); 166 }]; 167 } 168 169 - (void)showHUDByCustomView { 170 _hud = [[MBProgressHUD alloc] initWithView:self.view]; 171 _hud.mode = MBProgressHUDModeCustomView; 172 _hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"AlbumCellRedSelected"]]; 173 [self.view addSubview:_hud]; 174 175 [_hud showAnimated:YES 176 whileExecutingBlock:^{ 177 [self taskOfCustomView]; 178 } completionBlock:^{ 179 NSLog(@"showHUDByCustomView 执行完成"); 180 }]; 181 182 } 183 184 - (void)showHUDByText { 185 UIColor *color = [UIColor cyanColor]; 186 187 _hud = [[MBProgressHUD alloc] initWithView:self.view]; 188 _hud.mode = MBProgressHUDModeText; 189 _hud.labelText = @"加载中..."; 190 _hud.labelFont = [UIFont systemFontOfSize:17]; 191 _hud.labelColor = color; //设置文本颜色;默认为白色 192 _hud.detailsLabelText = @"用户请稍候,耐心等待"; 193 _hud.detailsLabelFont = [UIFont systemFontOfSize:14]; 194 _hud.detailsLabelColor = color; //设置详细文本颜色;默认为白色 195 [self.view addSubview:_hud]; 196 197 [_hud showAnimated:YES 198 whileExecutingBlock:^{ 199 [self taskOfText]; 200 } completionBlock:^{ 201 NSLog(@"showHUDByText 执行完成"); 202 }]; 203 } 204 205 #pragma mark - MBProgressHUDDelegate 206 - (void)hudWasHidden:(MBProgressHUD *)hud { 207 NSLog(@"隐藏后做一些操作"); 208 } 209 210 #pragma mark - TableView 211 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 212 return @"展示模式列表"; 213 } 214 215 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 216 return 1; 217 } 218 219 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 220 return _arrMode.count; 221 } 222 223 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 224 static NSString *cellIdentifier = @"cellIdentifier"; 225 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 226 if (!cell) { 227 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 228 } 229 230 NSInteger row = indexPath.row; 231 cell.textLabel.text = _arrMode[row]; 232 cell.textLabel.adjustsFontSizeToFitWidth = YES; 233 cell.detailTextLabel.text = _arrModeName[row]; 234 cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; 235 236 return cell; 237 } 238 239 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 240 switch (indexPath.row) { 241 case 0: 242 [self showHUDByIndeterminate]; 243 break; 244 case 1: 245 [self showHUDByDeterminate]; 246 break; 247 case 2: 248 [self showHUDByDeterminateHorizontalBar]; 249 break; 250 case 3: 251 [self showHUDByAnnularDeterminate]; 252 break; 253 case 4: 254 [self showHUDByCustomView]; 255 break; 256 case 5: 257 [self showHUDByText]; 258 break; 259 } 260 261 NSLog(@"%ld", (long)indexPath.row); 262 } 263 264 @end
AppDelegate.h
1 #import <UIKit/UIKit.h> 2 3 @interface AppDelegate : UIResponder <UIApplicationDelegate> 4 5 @property (strong, nonatomic) UIWindow *window; 6 @property (strong, nonatomic) UINavigationController *navigationController; 7 8 @end
AppDelegate.m
1 #import "AppDelegate.h" 2 #import "ViewController.h" 3 4 @interface AppDelegate () 5 6 @end 7 8 @implementation AppDelegate 9 10 11 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 12 _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 13 ViewController *viewController = [[ViewController alloc] init]; 14 _navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; 15 _window.rootViewController = _navigationController; 16 //[_window addSubview:_navigationController.view]; //当_window.rootViewController关联时,这一句可有可无 17 [_window makeKeyAndVisible]; 18 return YES; 19 } 20 21 - (void)applicationWillResignActive:(UIApplication *)application { 22 } 23 24 - (void)applicationDidEnterBackground:(UIApplication *)application { 25 } 26 27 - (void)applicationWillEnterForeground:(UIApplication *)application { 28 } 29 30 - (void)applicationDidBecomeActive:(UIApplication *)application { 31 } 32 33 - (void)applicationWillTerminate:(UIApplication *)application { 34 } 35 36 @end
输出结果:
1 2015-07-11 13:48:30.788 MBProgressHUDDemo[7211:111189] 0 2 2015-07-11 13:48:36.090 MBProgressHUDDemo[7211:111189] showHUDByIndeterminate 执行完成 3 2015-07-11 13:48:36.091 MBProgressHUDDemo[7211:111189] 隐藏后做一些操作 4 2015-07-11 13:48:37.378 MBProgressHUDDemo[7211:111189] 1 5 2015-07-11 13:48:43.208 MBProgressHUDDemo[7211:111189] showHUDByDeterminate 执行完成 6 2015-07-11 13:48:44.435 MBProgressHUDDemo[7211:111189] 2 7 2015-07-11 13:48:50.278 MBProgressHUDDemo[7211:111189] showHUDByDeterminateHorizontalBar 执行完成 8 2015-07-11 13:48:51.692 MBProgressHUDDemo[7211:111189] 3 9 2015-07-11 13:48:57.529 MBProgressHUDDemo[7211:111189] showHUDByAnnularDeterminate 执行完成 10 2015-07-11 13:48:58.473 MBProgressHUDDemo[7211:111189] 4 11 2015-07-11 13:49:01.778 MBProgressHUDDemo[7211:111189] showHUDByCustomView 执行完成 12 2015-07-11 13:49:02.790 MBProgressHUDDemo[7211:111189] 5 13 2015-07-11 13:49:06.096 MBProgressHUDDemo[7211:111189] showHUDByText 执行完成