Я реализую щепотку для увеличения изображения с помощью UIImageView внутри UIScrollView. Вид прокрутки не имеет полного размера экрана. Я сделал фон зеленого прокрутки. Затем я увеличил изображение.iOS UIScrollView щепотка увеличения добавляет пробел
Проблема заключается в том, что при прокрутке увеличенного изображения он не центрирован правильно в режиме прокрутки и имеет некоторое пространство справа и внизу. Если я попытаюсь прокрутить вверх или влево, просмотр прокрутки не позволяет прокручивать до конца изображения с помощью аналогичного количества пространства. Объем пространства, похоже, связан с тем, как я двигаю пальцами, делая жест щепотки.
Вот скриншот:
Вот мой код:
// 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-м.
Любое решение или рабочий обход было бы замечательным. Также будет оценена любая идея или возможное объяснение этого поведения.
Удалить делегат метод scrollViewDidEndZooming и снова проверить. – Apurv
Удаление scrollViewDidEndZooming не устраняет проблему с увеличением. Также без этого кода изображение также не центрируется при масштабировании. –