Zoom UIScrollView with multiple images

独自空忆成欢 提交于 2019-12-20 03:14:43

问题


I have a UIScrollFrame that contains multiple UIImageViews.

What is the correct way of supporting zoom in such a control?

Which view should 'viewForZoomingInScrollView' return?


回答1:


I finally implemented it by putting a scrollview within a scrollview. This way, the inner view handles page swipes while the outer handles zoom.




回答2:


Apple has a really nice piece of Sample Code that is all about UIScrollView and zooming and tiling. Check it out at

http://developer.apple.com/iphone/library/samplecode/ScrollViewSuite/index.html

This code is discussed in the Scoll Views session of WWDC2009. The video of that session is unfortunately not freely available, but you can buy it as part of the iPhone WWDC2009 video package.




回答3:


Just put a scrollview within another.

Like that:

    -(void)zoomToSelectedImage:(NSIndexPath *)indexPath
    {

      int currentPage = indexPath.row;

    //The External Scrollview. It move back and forward
      UIScrollView *contentViewZoom = [[UIScrollView alloc] initWithFrame:self.frame];
      [contentViewZoom setBackgroundColor:[UIColor colorWithWhite:0.0 alpha:0.8]];
      [contentViewZoom setContentSize:CGSizeMake(contentViewZoom.frame.size.width * [arrayOfImages count], contentViewZoom.frame.size.height)];
      [contentViewZoom setPagingEnabled:YES];
      [contentViewZoom setDelegate:self];


      for (int i = 0; i < [arrayOfImages count]; i++) {
        CGRect frame;
        frame.origin.x = contentViewZoom.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = contentViewZoom.frame.size;

        //The Internal Scrollview. It allow you zoom the picture

        UIScrollView *imageScrollView = [[UIScrollView alloc]initWithFrame:frame];
        [imageScrollView setTag:1];
        [imageScrollView setMinimumZoomScale:1.0];
        [imageScrollView setMaximumZoomScale:3.0];
        [imageScrollView setAlpha:1];
        [imageScrollView setDelegate:self];
        [imageScrollView setBouncesZoom:YES];
        [imageScrollView setClipsToBounds:YES];
        [imageScrollView setShowsHorizontalScrollIndicator:NO];
        [imageScrollView setShowsVerticalScrollIndicator:NO];
        [imageScrollView setContentSize:CGSizeMake(768, 1024)];


        UIImage *image = [arrayOfImages objectAtIndex:i];
        UIImageView* imgView = [[UIImageView alloc] init];
        [imgView setImage:image];
        [imgView setFrame:CGRectMake(0, 0, 768, 1024)];
        imgView.bounds = self.bounds;
        [imgView setClipsToBounds:YES];
        [imgView setContentMode:UIViewContentModeScaleAspectFit];
        [imgView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];

        [imageScrollView addSubview:imgView];
        [contentViewZoom addSubview:imageScrollView];

      }


      [self addSubview:contentViewZoom];  
      [contentViewZoom setAlpha:0.2];


      //Positioning according to current position
      CGRect frame;
      frame.origin.x = contentViewZoom.frame.size.width * currentPage;
      frame.origin.y = 0;
      frame.size = contentViewZoom.frame.size;
      [contentViewZoom scrollRectToVisible:frame animated:NO];

    }

OBS.: In my case, the screen size is fixed (768x1024), you should change as you need.



来源:https://stackoverflow.com/questions/2380643/zoom-uiscrollview-with-multiple-images

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!