第三方进度显示器MBProgressHUD的使用

来源:互联网 发布:钻展数据分析 编辑:程序博客网 时间:2024/05/01 13:58
总结:设置一个全局的hud,创建和添加到View上,设置属性,适时的show和隐藏!

1.定义一个全局的hud

{    MBProgressHUD *_HUD;    long long expectedLength;    long long currentLength;}

2创建和设置hud

#pragma mark - Actions//1- (IBAction)showSimple:(id)sender {    // The hud will dispable all input on the view (use the higest view possible in the view hierarchy)    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    // Regiser for HUD callbacks so we can remove it from the window at the right time    HUD.delegate = self;    // Show the HUD while the provided method executes in a new thread    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];}//2- (IBAction)showWithLabel:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    HUD.delegate = self;    HUD.labelText = @"Loading";    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];}//3- (IBAction)showWithDetailsLabel:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    HUD.delegate = self;    HUD.labelText = @"Loading";    HUD.detailsLabelText = @"updating data";    HUD.square = YES;    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];}//4- (IBAction)showWithLabelDeterminate:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    // Set determinate mode    HUD.mode = MBProgressHUDModeDeterminate;    HUD.delegate = self;    HUD.labelText = @"Loading";    // myProgressTask uses the HUD instance to update progress    [HUD showWhileExecuting:@selector(myProgressTask) onTarget:self withObject:nil animated:YES];}//5- (IBAction)showWIthLabelAnnularDeterminate:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    // Set determinate mode    HUD.mode = MBProgressHUDModeAnnularDeterminate;    HUD.delegate = self;    HUD.labelText = @"Loading";    // myProgressTask uses the HUD instance to update progress    [HUD showWhileExecuting:@selector(myProgressTask) onTarget:self withObject:nil animated:YES];}//6- (IBAction)showWithLabelDeterminateHorizontalBar:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    // Set determinate bar mode    HUD.mode = MBProgressHUDModeDeterminateHorizontalBar;    HUD.delegate = self;    // myProgressTask uses the HUD instance to update progress    [HUD showWhileExecuting:@selector(myProgressTask) onTarget:self withObject:nil animated:YES];}//7- (IBAction)showWithCustomView:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    // The sample image is based on the work by http://www.pixelpressicons.com, http://creativecommons.org/licenses/by/2.5/ca/    // Make the customViews 37 by 37 pixels for best results (those are the bounds of the build-in progress indicators)    HUD.customView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]] autorelease];    // Set custom view mode    HUD.mode = MBProgressHUDModeCustomView;    HUD.delegate = self;    HUD.labelText = @"Completed";    [HUD show:YES];    [HUD hide:YES afterDelay:3];}//8- (IBAction)showWithLabelMixed:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    HUD.delegate = self;    HUD.labelText = @"Connecting";    HUD.minSize = CGSizeMake(135.f, 135.f);    [HUD showWhileExecuting:@selector(myMixedTask) onTarget:self withObject:nil animated:YES];}//9- (IBAction)showUsingBlocks:(id)sender {#if NS_BLOCKS_AVAILABLE    MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:hud];    hud.labelText = @"With a block";    [hud showAnimated:YES whileExecutingBlock:^{        [self myTask];    } completionBlock:^{        [hud removeFromSuperview];        [hud release];    }];#endif}//10- (IBAction)showOnWindow:(id)sender {    // The hud will dispable all input on the window    HUD = [[MBProgressHUD alloc] initWithView:self.view.window];    [self.view.window addSubview:HUD];    HUD.delegate = self;    HUD.labelText = @"Loading";    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];}//11- (IBAction)showURL:(id)sender {    NSURL *URL = [NSURL URLWithString:@"http://a1408.g.akamai.net/5/1408/1388/2005110403/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_iPod.m4v.zip"];    NSURLRequest *request = [NSURLRequest requestWithURL:URL];    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];    [connection start];    [connection release];    HUD = [[MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES] retain];    HUD.delegate = self;}//12- (IBAction)showWithGradient:(id)sender {    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    HUD.dimBackground = YES;    // Regiser for HUD callbacks so we can remove it from the window at the right time    HUD.delegate = self;    // Show the HUD while the provided method executes in a new thread    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];}//13- (IBAction)showTextOnly:(id)sender {    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];    // Configure for text only and offset down    hud.mode = MBProgressHUDModeText;    hud.labelText = @"Some message...";    hud.margin = 10.f;    hud.removeFromSuperViewOnHide = YES;    [hud hide:YES afterDelay:3];}//14- (IBAction)showWithColor:(id)sender{    HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];    [self.navigationController.view addSubview:HUD];    // Set the hud to display with a color    HUD.color = [UIColor colorWithRed:0.23 green:0.50 blue:0.82 alpha:0.90];    HUD.delegate = self;    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];   }

//3.设置睡眠时间

#pragma mark - Execution code- (void)myTask {    // Do something usefull in here instead of sleeping ...    sleep(1);}- (void)myProgressTask {    // This just increases the progress indicator in a loop    float progress = 0.0f;    while (progress < 1.0f) {        progress += 0.01f;        HUD.progress = progress;        usleep(50000);    }}- (void)myMixedTask {    // Indeterminate mode    sleep(2);    // Switch to determinate mode    HUD.mode = MBProgressHUDModeDeterminate;    HUD.labelText = @"Progress";    float progress = 0.0f;    while (progress < 1.0f)    {        progress += 0.01f;        HUD.progress = progress;        usleep(50000);    }    // Back to indeterminate mode    HUD.mode = MBProgressHUDModeIndeterminate;    HUD.labelText = @"Cleaning up";    sleep(2);    // UIImageView is a UIKit class, we have to initialize it on the main thread    __block UIImageView *imageView;    dispatch_sync(dispatch_get_main_queue(), ^{        UIImage *image = [UIImage imageNamed:@"37x-Checkmark.png"];        imageView = [[UIImageView alloc] initWithImage:image];    });    HUD.customView = [imageView autorelease];    HUD.mode = MBProgressHUDModeCustomView;    HUD.labelText = @"Completed";    sleep(2);}

//4.NSURLConnection代理方法

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {    expectedLength = MAX([response expectedContentLength], 1);    currentLength = 0;    HUD.mode = MBProgressHUDModeDeterminate;}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {    currentLength += [data length];    HUD.progress = currentLength / (float)expectedLength;}- (void)connectionDidFinishLoading:(NSURLConnection *)connection {    HUD.customView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]] autorelease];    HUD.mode = MBProgressHUDModeCustomView;    [HUD hide:YES afterDelay:2];}- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {    [HUD hide:YES];}

5.hud的代理方法

#pragma mark - MBProgressHUDDelegate- (void)hudWasHidden:(MBProgressHUD *)hud {    // Remove HUD from screen when the HUD was hidded    [HUD removeFromSuperview];    [HUD release];    HUD = nil;}
0 0