UIScrollView + UIImageView放大/缩小

时间:2011-07-26 16:19:05

标签: zoom scrollview multi-touch

我有UIScrollView包含3 * UIImageView,每个UIImageView都有一个图像。 我使用的代码:

scrollView.delegate = self;

[self.scrollView setBackgroundColor:[UIColor blackColor]];
[scrollView setCanCancelContentTouches:NO];

scrollView.maximumZoomScale = 4.0;
scrollView.minimumZoomScale = 0.75;

scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;

NSUInteger nimages = 0;
CGFloat cx = 0;
for (; ; nimages++) {
  NSString *imageName = [NSString stringWithFormat:@"%d.jpg", (nimages + 1)];

  UIImage *image = [UIImage imageNamed:imageName];

  if (image == nil) {
    break;
  }

  imageView = [[UIImageView alloc] initWithImage:image];        
  CGRect rect = imageView.frame;
  rect.size.height = image.size.height;
  rect.size.width = image.size.width;
  rect.origin.x = ((scrollView.frame.size.width - image.size.width) / 2) + cx;
  rect.origin.y = ((scrollView.frame.size.height - image.size.height) / 2);
  [imageView setFrame:CGRectMake(cx, 0, self.view.frame.size.width, self.view.frame.size.height)];

  [scrollView addSubview:imageView];
  [imageView release];

  cx += scrollView.frame.size.width;
}

[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];

如何使用多点触控使ScrollView变焦? 我用了这段代码:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return imageView;
} 

但它无法正常工作,图像重叠,因为ScrollView包含多个图像。

我该如何解决? 感谢

3 个答案:

答案 0 :(得分:2)

不要直接将图像视图添加到scrollview,而是这样做:

分别为每个UIImageView创建一个新的UIScrollView对象,并将框架设置为与图像视图相同。将图像视图作为子视图添加到scrollview。请记住,这些滚动视图对象仅用于缩放图像,因此设置zoomScale,minimumZoomScale和maximumZoomScale,同时设置滚动委托。在委托控制器中:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return [scrollView.subViews objectAtIndex:0];
} 

然后,将所有滚动视图对象添加到您在代码中使用的滚动视图。此滚动视图仅用于滚动上面创建的子滚动视图。

知道了吗?

答案 1 :(得分:0)

您可以将PinchGesture用于图片视图...... 不需要使用3个滚动视图。

答案 2 :(得分:0)

尝试这3张图片:

**.h Controller:**

@interface MyViewController : UIViewController{

IBOutlet UIScrollView *scrollView; 
UIImageView *imageView;

}

@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIImageView *imageView;

.m控制器:

@synthesize scrollView, imageView;


-(UIView *)viewForZoomingInScrollView:(UIScrollVi­ew *)scrollView{ 

return imageView;

}

- (void)viewDidLoad
{

UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YourImageName.png"]]; 
self.imageView = tempImageView; 
[tempImageView release]; 
scrollView.maximumZoomScale = 3.0; 
scrollView.minimumZoomScale = 0.6; 
scrollView.clipsToBounds = YES; 
scrollView.delegate = self; 
[scrollView addSubview:imageView];
}

这段代码对我有用:)