UIScrollViewの実装

またしても、参った。
頭では原理が分かっていても、こんなに簡単にできてしまうと参る。
やはりiPhoneSDKはよくできており、開発者がやりたいことを簡単に実装できるようになっている。
さて、今回はUIScrollView、iPhone UIのルック&フィールを代表するUITKだ。
先達のおかげで、今回はハマりなしでできた。

ケルトンプロジェクトを作成

View-based Applicationで、プロジェクト名は「ScrollViewEX」。

表示をする"TestView"を追加

"ファイル"->"新規ファイル"で"UIView subclass"を作成、ファイル名は"TestView"、ヘッダーファイルも生成するようにチェックを入れる。


#import "TestView.h"
を"ScrollViewEXAppDelegare.m"、"ScrollViewEXViewController.m"に追加しておくこと。

Interface Builderで使用する参照を"ScrollViewEXViewController.h"に追加


@interface ScrollViewEXViewController : UIViewController {
IBOutlet UIScrollView* scrollView;
IBOutlet TestView* testView;
}
@end

ScrollViewと描画用ViewをUIViewControllerに追加する

  • "ScrollViewEXViewController.xibを(Interface Builderで)開く
  • ScrollViewを追加する、サイズはView一杯にする
  • Viewをその上に追加する、サイズは例えば(1000, 1000)にする、左上原点を(0, 0)にしておく、必ず下記のようにScrollViewの上にViewをおくこと

  • Viewのattributeを開き、参照するクラスを"TestView"に変える
  • 追加したScrollViewと、ViewControllerからの参照の"scrollView"を接続する
  • 追加したViewと、ViewControllerからの参照の"testView"を接続する

TestViewに描画を追加する

TestViewの"drawRect"のコメントアウトを外し、描画ルーチンを書く、まぁこれは適当になんでもよい。

"ScrollViewEXViewController"にUIScrollViewをデリゲートする

interfaceの定義を以下のようにする。


@interface ScrollViewEXViewController : UIViewController

"ScrollViewEXViewController"の"LoadView"をオーバーライドする


- (void)loadView {
[ super loadView ];
//
[ scrollView setContentSize:testView.frame.size];
[ scrollView setDelegate:self];
}
これで、フリックで上下左右にスクロールするのだ!

ピンチングズームを実装

"ScrollViewEXViewController"に以下のメソッドを追加。


- (UIView *)viewForZoomingInScrollView:(UIScrollView *)ScrollView {
UIView *view = nil;
if ( ScrollView == scrollView) {
view = testView;
}
return view;
}
"ScrollViewEXViewController"の"LoadView"のオーバライドの内容を、以下のように変更。

- (void)loadView {
[ super loadView ];
//
[ scrollView setContentSize:testView.frame.size];
[ scrollView setDelegate:self];
[ scrollView setMinimumZoomScale:0.1];
[ scrollView setMaximumZoomScale:10.0];
}

ほぉらもうできた、ちゃちゃちゃ。