UIScrollView перемещает изображение в верхний левый угол при увеличении - PullRequest
1 голос
/ 05 февраля 2012

Глядя на этот вопрос: Запрет UIScrollView от перемещения содержимого в верхний левый , у меня есть точная проблема.

Я использую этот урок: http://cocoadevblog.heroku.com/iphone-tutorial-uiimage-with-zooming-tapping-rotation

Возвращаясь к аналогичному вопросу, если я отключу UIScrollViewPanGestureRecognizer, я больше не смогу панорамировать увеличенное изображение.

У меня есть UIImageView в UIScrollView, и я хочу иметь возможность масштабировать и панорамировать изображение.

Как можно отключить перемещение содержимого в верхний левый угол при увеличении?

Ответы [ 5 ]

2 голосов
/ 06 февраля 2012

Кажется, я решил настроить параметры автоматического изменения размера и происхождения UiScrollView в Инспекторе размеров \ Атрибутах атрибутов. Я снял флажок «Пейджинг включен» и волшебство произошло.

1 голос
/ 14 апреля 2016

На тот случай, если кто-нибудь еще придет сюда и ни один из других ответов не сработает (что было в моём случае), для меня было удобнее установить contentSize scrollView. Просто установите его на размер любого подпредставления, на котором вы увеличиваете изображение, и оно должно работать.

0 голосов
/ 29 мая 2017

Если я вас правильно понял, вы хотите разрешить прокрутку только при увеличении ImageView, тогда scrollView.zoomScale > 1. Для моего требования приложения я использую это.

Добавьте метод делегата UIScrollView следующим образом и проверьте.

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    CGFloat offsetY = 0;
    if (aScrollView.zoomScale > 1)
        offsetY = aScrollView.contentOffset.y;

    [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, offsetY)];
}
0 голосов
/ 05 февраля 2012

Создайте подкласс UIScrollView и добавьте в него этот метод:

- (void)layoutSubviews {
    [super layoutSubviews];

    // center the image as it becomes smaller than the size of the screen
    CGSize boundsSize = self.bounds.size;

    //get the subView that is being zoomed
    UIView *subView = [self.delegate viewForZoomingInScrollView:self];

    if(subView)
    {
    CGRect frameToCenter = subView.frame;

    // center horizontally
    if (frameToCenter.size.width < boundsSize.width)
        frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
    else
        frameToCenter.origin.x = 0;

    // center vertically
    if (frameToCenter.size.height < boundsSize.height)
        frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
    else
        frameToCenter.origin.y = 0;

    subView.frame = frameToCenter;
    }

    else
        NSLog(@"No subView set for zooming in delegate");
}
0 голосов
/ 05 февраля 2012

Хотите ли вы, чтобы содержимое центрировалось при уменьшении масштаба? Проверьте этот похожий ТАК вопрос . Реальный ответ - внизу.

...