思路:
⼀个UIScrollView上只能缩放一个子视图,那如何实现每张图片都可以缩放?———一个大的UIScrollView上放多个小的UIScrollView,每个小的UIScrollView上放一张图片
-(void)dealloc{
self.scrollView = nil;
self.scrollView1 = nil;
self.pageControl = nil;
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self layoutScrollView];
}
- (void)layoutScrollView{
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
self.scrollView.contentSize = CGSizeMake(kScreenWidth * 6, kScreenHeight);
self.scrollView.scrollEnabled = YES;
self.scrollView.pagingEnabled = YES;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.delegate = self;
self.scrollView.tag = 300;
创建小的scrollView,放到大的scrollView上,并把图片放到小的scrollView上
for (int i = 0; i < 6; i++) {
self.scrollView1 = [[UIScrollView alloc] initWithFrame:CGRectMake(kScreenWidth * i, 0, kScreenWidth, kScreenHeight)];
self.scrollView1.contentSize = CGSizeMake(kScreenWidth, kScreenHeight);
self.scrollView1.pagingEnabled = YES;
self.scrollView1.delegate = self;
self.scrollView1.tag = 200 + i;
self.scrollView1.maximumZoomScale = 4.0;
self.scrollView1.minimumZoomScale = 0.5;
[self.scrollView addSubview:self.scrollView1];
UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, kScreenWidth, kScreenHeight / 3)];
NSString *imageName = [NSString stringWithFormat:@"p%d", i + 1];
NSString *filePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"jpg"];
imageV.image = [UIImage imageWithContentsOfFile:filePath];
imageV.tag = 100 + i;
[self.scrollView1 addSubview:imageV];
[imageV release];
[self.scrollView1 release];
}
[self.view addSubview:self.scrollView];
[self.scrollView release];
}
#pragma mark - ScrollViewDelegate
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
for (UIScrollView *v in scrollView.subviews) {
return v;
}
return nil;
}
判断的时机是在视图滑动结束的时候
判断视图有没有显示在当前页面,如果在就不做任何操作,如果不在当前页面,就遍历scrollView上的子视图上的视图,把它们的放大倍数设为1.0.
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
if (scrollView == self.scrollView) {
CGFloat x = scrollView.contentOffset.x;
if (x == offSet) {
}else{
offSet = x;
for (UIScrollView *view in scrollView.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
[view setZoomScale:1.0];
}
}
}
}
//这个方法会在界面返回之后才改变,不好
// NSInteger curentPage = scrollView.contentOffset.x / kScreenWidth;
// UIScrollView *nowScrollerView = (UIScrollView *)[self.scrollView viewWithTag:200 + curentPage];
// if (nowScrollerView.zoomScale != 1.0 && curentPage != _Page) {
// [nowScrollerView setZoomScale:1.0];
// }
// _Page = curentPage;
}