2010年6月24日木曜日

UIScrollViewで拡大縮小(iPhone/iPad)

スズキです。

iPhone/iPadをピンチイン/ピンチアウトして、拡大縮小する方法です。

ポイントはUIViewControllerのサブクラスでのUIScrollViewの利用です。

具体的には、"loadView"をオーバーライドして、その中で拡大縮小したい
UIViewとの間にUIScrollViewをかますように処理します。

またUIScrollViewDelegateの"viewForZoomingInScrollView"を
実装する必要もあります。

まあ、コードを見たほうが早いでしょう...

--------【Objective-C】--------
...
@implementation BoardViewController

UIView *view; // 拡大縮小させるView

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle
*)nibBundleOrNil {
  if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    self.title = @"Board";
  }
  return self;
}

- (void)loadView {
  // 作成するViewの幅
  CGFloat width = self.parentViewController.view.frame.size.width;
  // 作成するViewの高さ(タブバーとステータスバーを除く)
  CGFloat height = self.parentViewController.view.frame.size.height
      - self.tabBarController.tabBar.frame.size.height - 20;
  // 拡大縮小するView
  view = [[BoardView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
  // UIScrollView
  UIScrollView *scrollView = [
      [UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
  [scrollView addSubview:view]; // 拡大縮小するViewをUIScrollViewに追加
  [scrollView setDelegate:self]; // デリゲートを自分自身に
  [scrollView setContentSize:view.frame.size];
  [scrollView setMinimumZoomScale:1.0];
  [scrollView setMaximumZoomScale:2.0];
  [scrollView setBounces:NO];
  [scrollView setBouncesZoom:NO];
  [self setView:scrollView]; // UIScrollViewを追加
  [scrollView release];
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
  return view; // 拡大縮小するViewを返す
}

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

@end
--------
http://code.google.com/p/suz-lab-ios/source/browse/trunk/FutsalBoard/Classes/Tabs/BoardViewController.m?r=13

ソース全体は下記となります。
http://code.google.com/p/suz-lab-ios/source/browse/trunk/FutsalBoard/?r=13

次は回転の部分を作りこもう。

--------
http://www.suz-lab.com

0 コメント: