开发者

iPhone: Progress Indicator

In my app when I download something from service, I show progress indicator:

 - (void)setupProgressIndicator {
    MBProgressHUD *progressHUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:progressHUD];
    self.progressIndicator = progressHUD;
    [progressHUD release];
 }

[self.progressIndicator show:YES];

My view has Navigation Bar which I setup in my AppDelegate, and when indicator is shown, I still can tup on Navigation Bar Buttons...Can MBProgressHUB cover whole screen 开发者_开发知识库??? Because I don't want to disable buttons on sync start and than make them enable on sync finish...I think indicator should cover whole screen. Any ideas ? Thanks...


Here is my implementation use it if you want Put it in appDelegate and use from anywhere in the application.

#pragma mark -
#pragma mark Waiting View
- (void)showWaitingView {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    CGRect frame = CGRectMake(90, 190, 32, 32);
    UIActivityIndicatorView* progressInd = [[UIActivityIndicatorView alloc] initWithFrame:frame];
    [progressInd startAnimating];
    progressInd.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;

    frame = CGRectMake(130, 193, 140, 30);
    UILabel *waitingLable = [[UILabel alloc] initWithFrame:frame];
    waitingLable.text = @"Processing...";
    waitingLable.textColor = [UIColor whiteColor];
    waitingLable.font = [UIFont systemFontOfSize:20];;
    waitingLable.backgroundColor = [UIColor clearColor];
    frame = [[UIScreen mainScreen] applicationFrame];
    UIView *theView = [[UIView alloc] initWithFrame:frame];
    theView.backgroundColor = [UIColor blackColor];
    theView.alpha = 0.7;
    theView.tag = 999;
    [theView addSubview:progressInd];
    [theView addSubview:waitingLable];

    [progressInd release];
    [waitingLable release];

    [window addSubview:[theView autorelease]];
    [window bringSubviewToFront:theView];
    [pool drain];
}

- (void)removeWaitingView {
    UIView *v = [window viewWithTag:999];
    if(v) [v removeFromSuperview];

}


usual thing is to add an transparent view cover the entire screen and that will capture touch event. or you can make your HUD the size of the screen, with visible widget only in the center.


    - (IBAction)showWithCustomView:(id)sender {

        HUD = [[MBProgressHUD alloc] initWithView:self.view];

        [self.view addSubview:HUD];

        HUD.customView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]] autorelease];


        HUD.customView.frame=CGRectMake(0, 0, 320, 460);//Ur answer

        HUD.mode = MBProgressHUDModeCustomView;

        HUD.delegate = self;
        HUD.labelText = @"Completed";

        [HUD show:YES];
        [HUD hide:YES afterDelay:3];
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜