title: iOS Multiple Images Paging and Zooming Issues
body: <p>There are a few threads out there related to this issues, but could not find a solid solution. Any help would be appreciated. This code works great if you give it one image. Zooms in perfect. You give it two images it scrolls threws the images fine but when you go to zoom in it always zooms into the first image? Not sure why the viewForZoomingInScrollView method doesn't figure out which view you are on. Code posted below</p>
  
  <p>PagedScrollViewController.h</p>
  
  <pre><code>#import &lt;UIKit/UIKit.h&gt;
  @interface PagedScrollViewController : UIViewController &lt;UIScrollViewDelegate&gt;
  @property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
  @property (nonatomic, strong) IBOutlet UIPageControl *pageControl;
  @property (nonatomic, strong) IBOutlet UIButton *cancelButtonClicked;
  @property (nonatomic, strong) IBOutlet UILabel *headerTitle;
  @property (nonatomic, strong) IBOutlet NSString *headerTitleS;
  @property (nonatomic, strong) IBOutlet NSMutableArray *pageImages;
  @property (nonatomic, strong) IBOutlet UITextView *caption;
  @property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar;
  @property (nonatomic, strong) NSMutableArray *captionArray;
  
  -(IBAction)cancelButtonClicked:(id)sender;
  
  @end
  </code></pre>
  
  <p>PagedScrollViewController.m</p>
  
  <pre><code>@interface PagedScrollViewController ()
  @property (nonatomic, strong) NSMutableArray *pageViews;
  
  - (void)loadVisiblePages;
  - (void)loadPage:(NSInteger)page;
  - (void)purgePage:(NSInteger)page;
  @end
  
  @implementation PagedScrollViewController
  @synthesize scrollView = _scrollView;
  @synthesize pageControl = _pageControl;
  @synthesize pageImages = _pageImages;
  @synthesize pageViews = _pageViews;
  @synthesize cancelButtonClicked = _cancelButtonClicked;
  @synthesize headerTitle = _headerTitle;
  @synthesize headerTitleS = _headerTitleS;
  @synthesize caption = _caption;
  @synthesize captionArray = _captionArray;
  
  - (void)loadVisiblePages {
      // First, determine which page is currently visible
      CGFloat pageWidth = self.scrollView.frame.size.width;
      NSInteger page = (NSInteger)floor((self.scrollView.contentOffset.x * 2.0f + pageWidth) 
      / (pageWidth * 2.0f));
  
      // Update the page control
      self.pageControl.currentPage = page;
  
      NSObject *captionObject = [self.captionArray objectAtIndex:page];
      NSString *captionString = [NSString stringWithFormat:@"%@", [captionObject 
      valueForKey:@"caption"]]; 
      self.caption.text = captionString;
  
      // Work out which pages we want to load
      NSInteger firstPage = page - 1;
      NSInteger lastPage = page + 1;
  
      // Purge anything before the first page
      for (NSInteger i=0; i&lt;firstPage; i++) {
          [self purgePage:i];
      }
          for (NSInteger i=firstPage; i&lt;=lastPage; i++) {
          [self loadPage:i];
      }
      for (NSInteger i=lastPage+1; i&lt;self.pageImages.count; i++) {
          [self purgePage:i];
      }
  }
  
  - (void)loadPage:(NSInteger)page {
      if (page &lt; 0 || page &gt;= self.pageImages.count) {
          // If it's outside the range of what we have to display, then do nothing
          return;
      }
  
      // Load an individual page, first seeing if we've already loaded it
      UIView *pageView = [self.pageViews objectAtIndex:page];
      if ((NSNull*)pageView == [NSNull null]) {
          CGRect frame = self.scrollView.bounds;
          frame.origin.x = frame.size.width * page;
          frame.origin.y = 0.0f;
  
          UIImageView *newPageView = [[UIImageView alloc] initWithImage:[self.pageImages 
          objectAtIndex:page]];
  
          newPageView.contentMode  = UIViewContentModeScaleAspectFit;
          newPageView.frame = CGRectMake((page*320), 0, 310, 320);
          self.scrollView.maximumZoomScale = 1.3;
          self.scrollView.contentSize = CGSizeMake(320*[self.pageImages count],389);
          self.scrollView.frame = CGRectMake(320*(self.pageControl.currentPage), 44, 310, 
          370);
          [self.scrollView addSubview:newPageView];
          [self.pageViews replaceObjectAtIndex:page withObject:newPageView];
      }
   }
  
  - (void)purgePage:(NSInteger)page {
   if (page &lt; 0 || page &gt;= self.pageImages.count) {
      // If it's outside the range of what we have to display, then do nothing
      return;
  }
  
  // Remove a page from the scroll view and reset the container array
  UIView *pageView = [self.pageViews objectAtIndex:page];
      if ((NSNull*)pageView != [NSNull null]) {
          [pageView removeFromSuperview];
          [self.pageViews replaceObjectAtIndex:page withObject:[NSNull null]];
       }
   }
  
  -(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView {
        self.scrollView.contentSize = CGSizeMake(320*[self.pageImages count],389);
       return [self.scrollView.subviews objectAtIndex:self.pageControl.currentPage];
  }
  
  - (void)viewDidLoad {
      [super viewDidLoad];
      self.scrollView.delegate = self;
      self.headerTitle.text = self.headerTitleS;
      // Set up the image we want to scroll &amp; zoom and add it to the scroll view
      NSInteger pageCount = self.pageImages.count;
  
      // Set up the page control
      self.pageControl.currentPage = 0;
      self.pageControl.numberOfPages = pageCount;
  
      // Set up the array to hold the views for each page
      self.pageViews = [[NSMutableArray alloc] init];
      for (NSInteger i = 0; i &lt; pageCount; ++i) {
      [self.pageViews addObject:[NSNull null]];
      }
  }
  
  - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     // Load the initial set of pages that are on screen
     [self loadVisiblePages];
  }
  
  - (void)viewDidUnload {
     [super viewDidUnload];
     self.scrollView = nil;
     self.pageControl = nil;
     self.pageImages = nil;
     self.pageViews = nil;
  }
  
  - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [self loadVisiblePages];
  }
  
  -(IBAction)cancelButtonClicked:(id)sender{
     [self dismissViewControllerAnimated:YES completion:nil];
  }
  
  @end
  </code></pre>