2014-06-30 3 views
0

Я реализую щепотку для увеличения изображения с помощью UIImageView внутри UIScrollView. Вид прокрутки не имеет полного размера экрана. Я сделал фон зеленого прокрутки. Затем я увеличил изображение.iOS UIScrollView щепотка увеличения добавляет пробел

Проблема заключается в том, что при прокрутке увеличенного изображения он не центрирован правильно в режиме прокрутки и имеет некоторое пространство справа и внизу. Если я попытаюсь прокрутить вверх или влево, просмотр прокрутки не позволяет прокручивать до конца изображения с помощью аналогичного количества пространства. Объем пространства, похоже, связан с тем, как я двигаю пальцами, делая жест щепотки.

Вот скриншот:

space in scrollview is green Вот мой код:

// On viewWillAppear: 
- (void)loadMyImage 
{ 
    self.myImage.contentMode = UIViewContentModeScaleAspectFit; 
    self.myImage.image = self.originalImage; // an UIImage loaded from gallery 

    self.myImage.bounds = CGRectMake(0, 0, self.originalImage.size.width, self.originalImage.size.height); 
    self.scrollView.bounds = CGRectMake(0,0,320,200); 
    self.scrollView.frame = CGRectMake(0,0,320,200); 
    self.scrollView.minimumZoomScale=1.0f; 
    self.scrollView.maximumZoomScale=2.0f; 
    self.scrollView.delegate = self; 

    self.myImage.userInteractionEnabled = YES; 
} 

// Scroll view zooming events: 
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{return self.myImage;} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale 
{ 
    CGSize boundsSize = self.scrollView.bounds.size; 
    CGRect contentsFrame = self.myImage.frame; 

    if (contentsFrame.size.width < boundsSize.width) { 
     contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width)/2.0f; 
    } else { 
     contentsFrame.origin.x = 0.0f; 
    } 

    if (contentsFrame.size.height < boundsSize.height) { 
     contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height)/2.0f; 
    } else { 
     contentsFrame.origin.y = 0.0f; 
    } 

    self.myImage.center = CGPointMake(
     contentsFrame.origin.x + contentsFrame.size.width/2.0f, 
     contentsFrame.origin.y + contentsFrame.size.height/2.0f); 

    CGPoint offset = CGPointMake(
     self.myImage.center.x - self.scrollView.bounds.size.width/2.0f, 
     self.myImage.center.y - self.scrollView.bounds.size.height/2.0f); 

    [UIView animateWithDuration:.25 animations:^{ 
     [self.scrollView setContentOffset:offset]; 
    }]; 

    NSLog(@"Final state of frame: %g x %g (%g , %g) and center (%g , %g)", 
      self.myImage.frame.size.width, self.myImage.frame.size.height, 
      self.myImage.frame.origin.x, self.myImage.frame.origin.y, 
      self.myImage.center.x, self.myImage.center.y); 
    NSLog(@"offset: (%g , %g)", 
      self.scrollView.contentOffset.x, self.scrollView.contentOffset.y); 
    NSLog(@"Inset left %g , right %g , top %g , bottom %g", 
      self.scrollView.contentInset.left, 
      self.scrollView.contentInset.right, 
      self.scrollView.contentInset.top, 
      self.scrollView.contentInset.bottom); 
    NSLog(@"=================================="); 
} 

А вот мой выход:

Initial state of bounds: 320 x 200 
of frame: 320 x 200 (0 , 0) and center (160 , 100) 
offset: (0 , 0) 
================================== 
Final state of frame: 640 x 400 (0 , 0) and center (320 , 200) 
offset: (160 , 100) 
Inset left 0 , right 0 , top 0 , bottom 0 
================================== 

Я попытался установить automaticallyAdjustsScrollViewInsets к NO, но мое мнение контроллер не отвечает на селектор. И кроме того, вставки сообщают о 0-м.

Любое решение или рабочий обход было бы замечательным. Также будет оценена любая идея или возможное объяснение этого поведения.

+0

Удалить делегат метод scrollViewDidEndZooming и снова проверить. – Apurv

+0

Удаление scrollViewDidEndZooming не устраняет проблему с увеличением. Также без этого кода изображение также не центрируется при масштабировании. –

ответ

3

Я предлагаю вам использовать следующую библиотеку в Github:

https://github.com/akhiljayaram/PJImageZoomView

Не забудьте добавить

self.automaticallyAdjustsScrollViewInsets = NO; 

в вашем ViewController.
Надеюсь, это поможет! :)

+0

Большое спасибо. Ваше решение работает отлично. –

Смежные вопросы