title: Zoom a UIScrollview on Objective-C
body: <p>In one of the projects I'm working on, I have a <code>UIScrollView</code> that has a lot of buttons and labels that resemble movie theater seats that the user can tap to select seats for them to buy. Is it possible to zoom the <code>UIScrollView</code>? I have already declared the <code>UIScrollViewDelegate</code>, set the <code>delegate</code> to self, set the minimum and maximum zoom scale but I'm having issues with the <code>viewForZoomingInScrollView</code> and <code>scrollViewDidEndZooming</code> methods. I tried to return my scrollview on the <code>viewForZoomingInScrollView</code> method but it crashes.</p>
  
  <p>Here's some of the code:</p>
  
  <pre><code>- (void) renderSeatMapOnScreen
  {    
      int x_offset_row = 10;
      int y_offset_row = 25;
      int x_offset_col = 30;
      int y_offset_col = 0;
      int scrollview_w = 0;
      int scrollview_h = 0;
  
      NSString *row_name = @"";
      int tag_index  = 0;
  
      NSMutableArray *seat_map_table = [seat_map_xml seats_map]; 
      NSString *seat_available_str = [seat_avail_xml seat_available];
  
      HideNetworkActivityIndicator();
  
      NSLog(@"Seats available = %@", seat_available_str);
  
      NSArray *seats_avail = [seat_available_str componentsSeparatedByString:@";"];
  
      int ROW_COL_OFFSET = 25;
  
      for (int row = 0; row &lt; [seat_map_table count]; row++)
      {
          UILabel * rowlabel = [[UILabel alloc] init];
          rowlabel.frame = CGRectMake(x_offset_row , y_offset_row, 22, 22);
  
          SeatMapDeclaration *rowmap = [seat_map_table objectAtIndex:row];
          rowlabel.text = rowmap.rows;
          [scrollview addSubview:rowlabel];
  
          row_name = [NSString stringWithFormat:@"%@", rowmap.rows];
  
          NSArray *seat = [rowmap.rowmap componentsSeparatedByString:@";"];
          NSLog(@"row[%i] = %@", row, rowmap.rowmap);
  
          if (row == 0)
          {
              scrollview_w = [seat count] * ROW_COL_OFFSET + y_offset_row;
              total_column = [seat count];
              total_row = [seat_map_table count];
          }
  
          x_offset_col = 30 ;
          y_offset_col = y_offset_row ;
  
          for (int column = 0; column &lt; [seat count]; column++)
          {
              if (([[seat objectAtIndex:column] rangeOfString:@"a("].location != NSNotFound)
                 || ([[seat objectAtIndex:column] isEqualToString:@""]))
              {
                  CGRect myImageRect = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                  UIImageView *imageView = [[UIImageView alloc] initWithFrame:myImageRect];
                  [imageView setImage:[UIImage imageNamed:@"noseat.png"]];
                  [scrollview addSubview:imageView];
              }
              else if ([[seat objectAtIndex:column] rangeOfString:@"b("].location != NSNotFound)
              {
                  CGRect myImageRect = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                  UIImageView *imageView = [[UIImageView alloc] initWithFrame:myImageRect];
                  imageView.image = [UIImage imageNamed:@"noseat.png"];
                  [scrollview addSubview:imageView];
              }
              else
              {
                  NSString *status = [NSString stringWithFormat:@"%@%@", row_name, [seat objectAtIndex:column]];
  
                  BOOL matchedFound = NO;
                  for (int i = 0; i &lt; [seats_avail count]; i++)
                  {
                      if ([[seats_avail objectAtIndex:i] isEqualToString:status])
                      {
                          matchedFound = YES ;
                          break ;
                      }
                  }
  
                  if (matchedFound == YES)
                  {
                      UIButton * seat_btn = [UIButton buttonWithType:UIButtonTypeCustom];
                      [seat_btn setBackgroundImage:[UIImage imageNamed:@"seatavailable.png"] forState:UIControlStateNormal];
                      [seat_btn setBackgroundImage:[UIImage imageNamed:@"seatactive.png"] forState:UIControlStateSelected];
                      seat_btn.frame = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                      tag_index = [[seat objectAtIndex:column] intValue];
                      [seat_btn setTitle:[seat objectAtIndex:column] forState:UIControlStateNormal];
                      seat_btn.titleLabel.font = [UIFont fontWithName:@"Helvetica" size:12.0];
                      seat_btn.tag = tag_index + row * 100;
                      [seat_btn addTarget:self
                                   action:@selector(checkboxButton:)
                         forControlEvents:UIControlEventTouchUpInside];
                      [scrollview addSubview:seat_btn];
  
                  }
                  else
                  {
                      CGRect myImageRect = CGRectMake(x_offset_col, y_offset_col, 22, 22);
                      UIImageView *imageView = [[UIImageView alloc] initWithFrame:myImageRect];
                      imageView.image = [UIImage imageNamed:@"seat_not_available.png"];
                      [scrollview addSubview:imageView];
                  }
              }
  
              x_offset_col += ROW_COL_OFFSET ;
  
              NSString *data = @"";
              [seatControl addObject:data];
          }
          y_offset_row += ROW_COL_OFFSET;
      }
  
      UILabel *screenlabel = [[UILabel alloc] init];
      screenlabel.frame = CGRectMake((scrollview_w-300)/2, 3, 300, 15);
      screenlabel.text = @"Screen";
      screenlabel.backgroundColor = [UIColor blackColor];
      screenlabel.textColor = [UIColor whiteColor] ;
      screenlabel.font = [UIFont fontWithName:@"Helvetica" size:10.0];
      screenlabel.textAlignment = UITextAlignmentCenter;
      [scrollview addSubview:screenlabel];
  
      scrollview_h = y_offset_row + ROW_COL_OFFSET;
      // Adjust scroll view
      [scrollview setContentSize:CGSizeMake(scrollview_w, scrollview_h )];
  }
  
  - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
  {
      NSLog(@"1");
  
      return scrollview;
  }
  
  - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
  {
      NSLog(@"2");
  }
  </code></pre>