UIScrollViewを使って選択した画像をピンチイン・ピンチアウトする方法を説明します。 まずはじめに画像の拡大率・縮小率の限界値を設定します。デフォルトの値がどちらも1.0なので そのままの状態では拡大することができません。scrollViewのデリゲートも適切に設定しておく必要があります。
[scrollView setMinimumZoomScale:1.0];
[scrollView setMaximumZoomScale:5.0];
scrollView.delegate = self;
次に、UIImageViewをaddSubviewでUIScrollViewに追加します。まずはじめにimageViewに画像を設定し、その
サイズをScrollViewに設定します。その後にimageViewをScrollViewに追加することで画像を拡大・縮小することが出来るようになります。
imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
scrollView.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);
[scrollView addSubview:imageView];
最後にデリゲートメソッドを設定します。必ず実装する必要があるメソッドがviewForZoomingInScrollView:です。 このメソッドでは画像を設定したimageViewを返さなければなりません。
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)_scrollView {
return imageView;
}
その他のデリゲートとして設定しておくと便利なのが下記の3つのメソッドです。scrollViewDidEndDragging:willDecelerate: はドラッグが終了した時に呼ばれるメソッドです(あくまでもドラッグが終了した時点なので、その後画面が慣性で移動した分は 考慮されない・・)scrollViewDidEndDecelerating:は実際に画面が静止したときに呼ばれるメソッドです。最後の scrollViewDidEndZooming:withView:atScale:は画面のズームが終了したときに呼ばれるメソッドです。
- (void)scrollViewDidEndDragging:(UIScrollView *)_scrollView
willDecelerate:(BOOL)decelerate
{
offset.x = _scrollView.contentOffset.x/screenScale;
offset.y = _scrollView.contentOffset.y/screenScale;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView
{
offset.x = _scrollView.contentOffset.x/screenScale;
offset.y = _scrollView.contentOffset.y/screenScale;
}
- (void)scrollViewDidEndZooming:(UIScrollView *)_scrollView
withView:(UIView *)view atScale:(float)scale {
[scrollView setZoomScale:scale+0.01 animated:NO];
[scrollView setZoomScale:scale animated:NO];
screenScale = scale;
offset.x = _scrollView.contentOffset.x/screenScale;
offset.y = _scrollView.contentOffset.y/screenScale;
}
Copyright (C) Kazuma Kitamura All right reserved.