RSS

iPhone: UIScrollViewで背景画像を設定する

UIScrollViewに背景画像を設定して,スクロールしても背景画像を(ちゃんと)表示するためのメモです.他にスマートな方法があれば教えてください.

まず背景画像を表示するために,UIScrollViewにUIImageViewを追加する.
-(void)hogehoge
{
UIScrollView* scrollView = [[UIScrollView alloc] init];
[scrollView setFrame:CGRectMake(0.0, 0.0, WIDTH, HEIGHT)];
[scrollView setContentSize:CGSizeMake(CONTENT_WIDTH, CONTENT_HEIGHT)];

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"wall.png"]];
[imageView setFrame:CGRectMake(0.0, 0.0, WIDTH, HEIGHT)];
[scrollView addSubview:imageView];
[imageView release];

[self.view addSubview:scrollView];
}
これだと背景画像は表示されるけど,スクロールして画像サイズを越えると背景画像は表示されない.いくらスクロールして表示させるために,
[imageView setFrame:CGRectMake(0.0, 0.0, CONTENT_WIDTH, CONTENT_HEIGHT)];
とすると,スクロールしても切れないけど,背景画像がContentSizeに拡大される.拡大しても大丈夫なら問題ないけど,大抵は問題ありなので,別の方法に変える.デリゲートを使ってスクロールのオフセット値を読み取って,背景画像の表示位置をオンタイムで変えてみる.
-(void)hogehoge
{
UIScrollView* scrollView = [[UIScrollView alloc] init];
[scrollView setFrame:CGRectMake(0.0, 0.0, WIDTH, HEIGHT)];
[scrollView setContentSize:CGSizeMake(CONTENT_WIDTH, CONTENT_HEIGHT)];
[scrollView setDelegate:self];

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"wall.png"]];
[imageView setTag:99];
[imageView setFrame:CGRectMake(0.0, 0.0, WIDTH, HEIGHT)];
[scrollView addSubview:imageView];
[imageView release];

[self.view addSubview:scrollView];
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView_
{
if( scrollView_ == scrollView )
{
[[scrollView_ viewWithTag:99] setFrame:CGRectMake(scrollView_.contentOffset.x, scrollView_.contentOffset.y, WIDTH, HEIGHT)];
}
}
これでいくらスクロールしても背景画像も一緒に動いているので,きれいに表示されます.背景画像はわざわざhファイルで宣言するのも何なので,tagで判定しています(他の兼ね合いでtag値は適宜調整が必要).

Bookmark and Share

3 コメント:

tokorom さんのコメント...

UIScrollViewにUIImageViewをaddせず、
[self.view addSubview:imageView];
[self.view addSubview:scrollView];
と、imageView、scrollViewの順でviewにaddして、scrollViewの背景を透過にしておくというのはなしですか?

mitsuharu さんのコメント...

あ,なるほど.逆ですか.UIScrollViewのaddとremoveばかりしていたので,UIScrollViewを中心で考えてました.

もしかして,UIKit本のtokoromさんですか!? UIKit本はいつも参考にしてます!

mitsuharu さんのコメント...

やっぱり,逆は私には効率が悪いです.