またしても、参った。
頭では原理が分かっていても、こんなに簡単にできてしまうと参る。
やはりiPhoneSDKはよくできており、開発者がやりたいことを簡単に実装できるようになっている。
さて、今回はUIScrollView、iPhone UIのルック&フィールを代表するUITKだ。
先達のおかげで、今回はハマりなしでできた。
スケルトンプロジェクトを作成
View-based Applicationで、プロジェクト名は「ScrollViewEX」。
表示をする"TestView"を追加
"ファイル"->"新規ファイル"で"UIView subclass"を作成、ファイル名は"TestView"、ヘッダーファイルも生成するようにチェックを入れる。
を"ScrollViewEXAppDelegare.m"、"ScrollViewEXViewController.m"に追加しておくこと。
#import "TestView.h"
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"に以下のメソッドを追加。
"ScrollViewEXViewController"の"LoadView"のオーバライドの内容を、以下のように変更。
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)ScrollView {
UIView *view = nil;
if ( ScrollView == scrollView) {
view = testView;
}
return view;
}
- (void)loadView {
[ super loadView ];
//
[ scrollView setContentSize:testView.frame.size];
[ scrollView setDelegate:self];
[ scrollView setMinimumZoomScale:0.1];
[ scrollView setMaximumZoomScale:10.0];
}
ほぉらもうできた、ちゃちゃちゃ。