如何在UIScrollView中提供Zoomin-Zoomout,Paging功能?

时间:2010-08-05 07:57:23

标签: iphone

我有一个来自该数组的Image URl数组我在Scrollview中显示了我的图像,因为我想利用分页和缩放这样做我应该怎么做才能完成这个任务?假设我的数组包含10个URL然后每个时间滚动我应该得到不同的图像,我也可以执行放大和缩小10个图像中的任何一个,所以请给我一些指导来完成我的任务。谢谢提前。

1 个答案:

答案 0 :(得分:0)

试试这个

- (void)setCurrentPage:(NSUInteger)page {
    if (page == offsetX)
        return;
    offsetX = page;
    // in a real app, this would be a good place to instantiate more view controllers -- see SDK examples
}

- (CGSize)pageSize {
    CGSize pageSize = scrollView1.frame.size;
    if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
        return CGSizeMake(pageSize.height, pageSize.width);
    else
        return pageSize;
}

- (void)setPagingMode {
    // reposition pages side by side, add them back to the view
    CGSize pageSize = [self pageSize];
    NSUInteger page = 0;
    for (UIView *view in imgViewArray) {
        if (!view.superview)
            [scrollView1 addSubview:view];
        view.frame = CGRectMake(pageSize.width * page++, 0, pageSize.width, pageSize.height);
    }

    scrollView1.pagingEnabled = YES;
    scrollView1.showsVerticalScrollIndicator = scrollView1.showsHorizontalScrollIndicator = NO;
    scrollView1.contentSize = CGSizeMake(pageSize.width * [imgViewArray count], pageSize.height);
    scrollView1.contentOffset = CGPointMake(pageSize.width * offsetX, 0);

    scrollViewMode = ScrollViewModePaging;
}

- (void)setZoomingMode {
    NSLog(@"setZoomingMode");
    scrollViewMode = ScrollViewModeZooming; // has to be set early, or else currentPage will be mistakenly reset by scrollViewDidScroll

    // hide all pages except the current one
    NSUInteger page = 0;
    for (UIView *view in imgViewArray)
        if (offsetX != page++)
            [view removeFromSuperview];

    scrollView1.pagingEnabled = NO;
    scrollView1.showsVerticalScrollIndicator = scrollView1.showsHorizontalScrollIndicator = YES;
    pendingOffsetDelta = scrollView1.contentOffset.x;
    scrollView1.bouncesZoom = YES;
}    

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView 
{
 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
  { 
  // offsetX=(aScrollView.contentOffset.x)/768;
   //NSLog(@"Page No:%d",offsetX);
      if (scrollViewMode == ScrollViewModePaging)
          [self setCurrentPage:roundf(scrollView1.contentOffset.x / [self pageSize].width)];


  }
 else 
 {
  //offsetX=(aScrollView.contentOffset.x)/320;
  //NSLog(@"Page No:%d",offsetX);   
     if (scrollViewMode == ScrollViewModePaging)
         [self setCurrentPage:roundf(scrollView1.contentOffset.x / [self pageSize].width)];

 }
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView 
{
    NSLog(@"viewForZoomingInScrollView");
    if (scrollViewMode != ScrollViewModeZooming)
        [self setZoomingMode];
    return [imgViewArray objectAtIndex:offsetX];

}

- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale:(float)scale {
    NSLog(@"scrollViewDidEndZooming");
    if (scrollView1.zoomScale == scrollView1.minimumZoomScale)
        [self setPagingMode];
    else if (pendingOffsetDelta > 0) {
        UIView *view = [imgViewArray objectAtIndex:offsetX];
        view.center = CGPointMake(view.center.x - pendingOffsetDelta, view.center.y);
        CGSize pageSize = [self pageSize];
        scrollView1.contentOffset = CGPointMake(scrollView1.contentOffset.x - pendingOffsetDelta, scrollView1.contentOffset.y);
        scrollView1.contentSize = CGSizeMake(pageSize.width * scrollView1.zoomScale, pageSize.height * scrollView1.zoomScale);
        pendingOffsetDelta = 0;
    }

}