2014-12-10 2 views
0

Всякий раз, когда я нажимаю на изображение, я хочу, чтобы изображение отображалось как большее изображение с возможностью масштабирования. Пока я нажимаю на изображение, он отображается, когда я хочу, чтобы он находился в прокрутке. Тем не менее, мне должно быть повезло, что вы можете правильно масштабировать. Большую часть времени, когда я пытаюсь увеличить масштаб, изображение просто перемещается вниз и направо и не масштабируется вообще. Вот мой код:UIScrollView не работает должным образом

-(void) pictureButtonAction 
{ 
    self.scrollImageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; 
    self.scrollImageView.contentSize = self.fullImageView.image.size; 
    self.scrollImageView.delegate = self; 
    self.scrollImageView.clipsToBounds = YES; 
    self.scrollImageView.scrollEnabled = YES; 
    [self.scrollImageView setMaximumZoomScale:4.0f]; 
    [self.scrollImageView setMinimumZoomScale:1.0f]; 
    [self.view addSubview:self.scrollImageView]; 
    [self.scrollImageView addSubview:fullImageView]; 
} 

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return self.fullImageView; 
} 
+0

Попробуйте сделать размер содержания Scrollview равным FullIamgeView Рамка. Лучше использовать размер кадра fullImageView в initWithFrame, где вы создаете UIScrollView. – Priyatham51

ответ

1

Рамка ImageViews изменена во время масштабирования, так что она перемещается вниз. Итак, вы должны централизовать просмотр изображения при каждом масштабировании.

Ваше содержание прокрутки должно быть больше или равно вашему размеру изображения, если ваш fullImageView.image.size меньше, чем ваши ограничения scrollviews, а затем установите для вашего scrollviews contentSize по крайней мере вдвое больше границ прокрутки.

вызов ниже функции в методе делегата scrollViewDidZoom

-(void) centerScrollViewContents 
{ 
    CGSize boundsSize = self.scrollView.bounds.size; 
    CGRect contentsFrame = self.imageView.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.imageView.frame = contentsFrame; 
} 

Попробуйте это, надеюсь, это поможет вам; счастливое кодирование! :)

+0

К сожалению, это не сработало. Я думаю, что проблема заключалась в том, что я пытался представить представление прокрутки поверх таблицы. Теперь я сделал это отдельным контроллером просмотра, и все работает нормально. – bpomp87

0

@ ответы работ Марии, но при масштабировании вы будете испытывать нежелательные отскоки, вместо того, чтобы использовать его под scrollViewDidZoom, используйте scrollViewDidEndZooming: делегат, чтобы предотвратить это ..

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale 
{ 
    [self centerScrollViewContents]; 
} 

и с небольшим усилением от ее коды :

[UIView animateWithDuration:0 animations:^{ 

    self.previewImageView.frame = contentsFrame; 

}]; 

немного поздно для ответа, но я надеюсь, что это будет полезно для некоторых ..

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