IOS開發UI篇之──自定義加載等待框(MBProgressHUD)


這里介紹一下網友開源的MBProgressHUD類,實現等待框,


一、網上下載  MBProgessHUD 類文件,直接導入到工程即可

二、示例分析

在我的工程中示例如下:

1)在ShowImageViewController.h頭文件代碼如下:

 

#import <UIKit/UIKit.h>

#import "MBProgressHUD.h"


@interface ShowImageViewController : UIViewController<MBProgressHUDDelegate> {

    NSString        *_picUrlString;

    UIImageView     *_imageView;    

    MBProgressHUD    *_progressHUD;

}

@property (nonatomiccopyNSString       *picUrlString;

@property (nonatomicretainIBOutlet UIImageView *imageView;

@property (nonatomicretainMBProgressHUD    *progressHUD;

//請求圖片資源

-(void)imageResourceRequest;


//顯示圖片信息

-(void)displayImage:(UIImage *)image;


- (IBAction)dismissModealView:(id)sender;

-(void)removeModalView;

@end


2)在ShowImageViewController.m實現文件代碼如下:

 

#import "ShowImageViewController.h"

#import <QuartzCore/QuartzCore.h>

 

@implementation ShowImageViewController

@synthesize picUrlString = _picUrlString;

@synthesize imageView = _imageView;

@synthesize progressHUD = _progressHUD;

 

- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.

    self.view.backgroundColor = [UIColor grayColor];

    self.view.alpha = 0.8;

    

    //設置圖片為圓角

    self.imageView.backgroundColor = [UIColor clearColor];

  self.imageView.layer.borderColor = [UIColor lightGrayColor].CGColor;

  self.imageView.layer.borderWidth = 5.0;

    self.imageView.layer.masksToBounds = YES; 

    self.imageView.layer.cornerRadius = 10.0; 

}

 

-(void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated];

    //當進入視圖時,重新設置imageView

    [self.imageView setImage:nil];

    [self.imageView setFrame:CGRectMake(160, 200, 0, 0)];

    //顯示加載等待框

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

[self.view addSubview:self.progressHUD];

[self.view bringSubviewToFront:self.progressHUD];

self.progressHUD.delegate = self;

self.progressHUD.labelText = @"加載中...";

[self.progressHUD show:YES];

    

    //開啟線程,請求圖片資源

    [NSThread detachNewThreadSelector:@selector(imageResourceRequest) toTarget:self withObject:nil];

}

//請求圖片資源

-(void)imageResourceRequest

{

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

    //根據網絡數據,獲得到image資源

    NSData  *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.picUrlString]];

    UIImage *image = [[UIImage alloc] initWithData:data];

    [data release];

    //回到主線程,顯示圖片信息

    [self performSelectorOnMainThread:@selector(displayImage:) withObject:image waitUntilDone:NO];

    [image release];

 

    [pool release];

}

//顯示圖片信息

-(void)displayImage:(UIImage *)image

{

    //self.progressHUD為真,則將self.progressHUD移除,設為nil

    if (self.progressHUD){

        [self.progressHUD removeFromSuperview];

        [self.progressHUD release];

        self.progressHUD = nil;

    }

    

    //圖片慢慢放大動畫效果

    [self.imageView setImage:image];

    [UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:0.5];

[self.imageView setFrame:CGRectMake(40, 100, 240, 160)];

[UIView commitAnimations];

        

}

- (void)viewDidUnload

{

    [self setImageView:nil];

    [super viewDidUnload];

    // Release any retained subviews of the main view.

    // e.g. self.myOutlet = nil;

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    // Return YES for supported orientations

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

 

- (IBAction)dismissModealView:(id)sender {   

    //設置定時器,當動畫結束時,子視圖從父視圖中移除

    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(removeModalView) userInfo:nil repeats:NO];

    

    [UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:0.5];

[self.imageView setFrame:CGRectMake(160, 200, 0, 0)];

[UIView commitAnimations];

    

}

-(void)removeModalView

{

    [self.view removeFromSuperview];

}

#pragma mark -

#pragma mark MBProgressHUDDelegate methods

- (void)hudWasHidden:(MBProgressHUD *)hud {

NSLog(@"Hud: %@", hud);

    // Remove HUD from screen when the HUD was hidded

    [self.progressHUD removeFromSuperview];

    [self.progressHUD release];

    self.progressHUD = nil;

}

 

- (void)dealloc

{

    [_picUrlString release];

    [_imageView release];

    [super dealloc];

}

@end


三、效果展示


四、總結

利用MBProgressHUD實現加載等待框,視覺效果大大提高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM