2012年5月12日土曜日

iphoneアプリ UIWebviewを呼び出しながら、UIActivityIndicatorViewを表示する方法

UIWebViewを表示させるとき、読み込みにちょっと時間がかかるので、
ユーザーにページを読み込み中である事を
アピールするために、ページの真ん中に、
ページ読み込み中はくるくる回るアイコンを表示させたいと思います。

ただ、ちょっとハマったのでメモ。

【UIWebViewにUIActivityIndicatorViewを表示させるポイント】
●UIWebViewの背景が白いと、インジケーターが表示されていても見えない。
●WEBの読み込み開始時と、読み込み終了時にインジケーターを表示、非表示させる。

ということで、
早速コードになります。

uiwebview.h------


#import <UIKit/UIKit.h>

@interface uiwebviewViewController : UIViewController<UIWebViewDelegate> {
UIWebView *wv;
UIActivityIndicatorView* indicator;
}

@property (nonatomic, retain) UIWebView *wv;
@property (nonatomic, retain) UIActivityIndicatorView *indicator;


@end

-------

まずは、WEBを表示させるUIWebViewを用意。
インジケーターも用意します。

uiwebview.m------

@implementation uiwebviewViewController

@synthesize wv;
@synthesize indicator;

-(void)viewDidLoad {
[self.view setBackgroundColor:[UIColor colorWithRed:247/256.0 green:232/256.0 blue:186/256.0 alpha:1.0f]];

//webview1を作成
self.wv = [[UIWebView alloc] init];
self.wv.delegate = self;
self.wv.frame = CGRectMake(0, 40, 320, 420);
self.wv.backgroundColor = [UIColor redColor];
self.wv.alpha = 0.9;
self.wv.scalesPageToFit = YES;
NSURL *url = [NSURL URLWithString:@"ここに読み込むHTMLを記入"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[self.wv loadRequest:req];
[self.view addSubview:self.wv];

//インジケーターを用意する
self.indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self.indicator.frame = CGRectMake((320/2)-20, (480/2)-60, 40, 40);
[self.view addSubview:self.indicator];
}


//WEBの読み込みを開始したら
- (void)webViewDidStartLoad:(UIWebView*)webView {
//インジケーターの表示
[indicator startAnimating];
}

//WEBの読み込み成功したら
- (void)webViewDidFinishLoad:(UIWebView*)webView {
//インジケーターの非表示
[indicator stopAnimating];
}

//WEBの読み込みに失敗したら
- (void)webView:(UIWebView*)webView 
didFailLoadWithError:(NSError*)error {
//インジケーターの非表示
[indicator stopAnimating];
}

// ページ読込開始時にインジケータをくるくるさせる
// ※これは、ページの上の時間とかが表示されてるところに表示させるやつです。
-(void)webViewDidStartLoad:(UIWebView*)wv{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
-(void)webViewDidFinishLoad:(UIWebView*)wv{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void)dealloc {
[wv release];
[indicator release];
[super dealloc];
}

@end

-------


以上です!
ぜひお試しください。

0 件のコメント:

コメントを投稿