Translate

2013年4月1日 星期一

UIImageView zoom

專案裡需要一個小功能
針對圖片放大縮小

花了點時間找了些資料
實作的時候卻發現在zoom的時候圖片怪怪的
原來魔鬼藏在細節裡
大致上最重要的一句話就是

//如果不加这句的话
[imageView setFrame:CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)];
//那么正常拖动是可以的,但是如果zoom了 就会有问题

全整的程式碼
scrollViewController.h
記得加上UIScrollViewDelegate
這樣才有拖拉放大縮小的效果
#import @interface scrollViewController : UIViewController { IBOutlet UIScrollView *scrollView; UIImageView *imageView; } @end
scrollViewController.m

- (void)viewDidLoad { [super viewDidLoad]; [scrollView setMinimumZoomScale:1.0]; [scrollView setMaximumZoomScale:5.0]; scrollView.delegate = self; scrollView.bounces = NO; [scrollView setShowsHorizontalScrollIndicator:NO]; [scrollView setShowsVerticalScrollIndicator:NO]; [scrollView setBackgroundColor:[UIColor blackColor]]; imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.jpg"]]; [imageView setContentMode:UIViewContentModeScaleAspectFit]; //如果不加这句的话 [imageView setFrame:CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)]; //那么正常拖动是可以的,但是如果zoom了 就会有问题 //zoom发生后会把frame变成当前显示大小[imageview默认大小 屏幕显示大小 如是全屏则就是全屏大小] zoom变化导致frame同步改变了image的size 大小为frame大小 //image 的size改变后导致self.scrollView.contentSize 变成了frame的大小 从而contentSize变小了 无法实现正常拖动。 //然后根据zoom缩放比例变化。而不是根据实际图片大小。这么导致zoom后就无法拖动了[因为frame大小] scrollView.contentSize = imageView.frame.size; [scrollView addSubview:imageView]; [scrollView setZoomScale:scrollView.minimumZoomScale]; } #pragma mark - UIScrollViewDelegate - (UIView *)viewForZoomingInScrollView:(UIScrollView *)_scrollView { return imageView; }

沒有留言:

張貼留言