UIScrollViewの使い方

UIScrollViewの使い方に移動しました。



方法


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;
}

iPhoneアプリWorkshop

Copyright (C) Kazuma Kitamura All right reserved.