установить размер страницы UIscrollView

Я искал, как сделать меню прокрутки с обертыванием (зацикливанием) UIScrollview. Я проверил этот вопрос, и пример работает, и, возможно, это хороший подход.

Но вместо того, чтобы показывать только одну страницу (изображение), мне нужно отображать 3 страницы и иметь возможность прокручивать одну страницу за раз.

Итак, как я могу установить размер страницы UIScrollView на 1/3 меньше, чем фрейм (я думаю, так это сработает) ??

Это достижимо ?? Если нет, пожалуйста, направьте меня в другое русло

Спасибо


person Frade    schedule 14.12.2011    source источник
comment
готово;) Как закрыть вопрос ??   -  person Frade    schedule 14.12.2011
comment
Спасибо Сара .. и извиняюсь за ошибки ..;)   -  person Frade    schedule 11.01.2012
comment
Итак, как вы это решили? Вы пытались сделать так, чтобы перелистывание страницы происходило на одну страницу вправо, например, слева 1/3 предыдущего экрана отображалась слева, верно? Если вы узнали, как сделать каждую страницу уже, я бы хотел знать, как это сделать, спасибо.   -  person Ryan    schedule 17.04.2012
comment
Привет, Райан! Честно говоря, на данный момент не помню, как я решил проблему ... В одном уверен, я не делал размер страницы на 1/3 меньше кадра. Может быть, я найду обходной путь ..   -  person Frade    schedule 05.09.2013
comment
Я вернулся к этой проблеме: / Кто-нибудь нашел решение?   -  person Frade    schedule 15.07.2015
comment
как я могу оживить этот вопрос?   -  person Frade    schedule 15.07.2015
comment
@Ryan нашел решение   -  person Frade    schedule 16.07.2015


Ответы (3)


Я считаю, что вы говорите о том, что часть предыдущей страницы и часть следующей страницы видны. Способ сделать это - установить рамку представления прокрутки так, как вы хотите (например, меньше экрана), а затем отключить обрезку подпредставлений для представления прокрутки. Так вы добьетесь желаемого эффекта.

person brant    schedule 28.01.2013
comment
это работает (так как это было моей первоначальной мыслью о том, над чем я работаю), но, как я обнаружил, он также отображает область за пределами кадра, не реагирующую на прикосновение / смахивание. как-нибудь обойти это? - person d2burke; 03.04.2014

  1. [theScrollView setFrame:<a frame>]; установит рамку просмотра прокрутки
  2. [theScrollView setContentSize:<a Size>];, чтобы установить размер содержимого прокрутки.

Размер в 1. должен составлять 1/3 размера в 2.

person Niko    schedule 14.12.2011
comment
Да, ты прав. Но размер страницы будет такого же размера, как и размер рамки. Размер содержимого будет 3 * размер кадра, и у него будет 3 страницы. Цель состоит в том, чтобы уменьшить размер страницы на 1/3. Спасибо, в любом случае - person Frade; 14.12.2011

Через некоторое время мне снова нужно решить эту проблему.

Я нашел решение, которое сработало для меня.

Проверьте этот ответ:

  1. Измените размер scrollView на нужный размер страницы
  2. Установите свой scroll.clipsToBounds = NO
  3. Создайте подкласс UIView (например, HackClipView) и переопределите метод hitTest: withEvent:

    -(UIView *) hitTest:(CGPoint) point withEvent:(UIEvent *)event
    {     
        UIView* child = [super hitTest:point withEvent:event]; 
        if (child == self && self.subviews.count > 0)  
        {
            return self.subviews[0];
        }
        return child;
    }
    
  4. Установите HackClipView.clipsToBounds = YES

  5. Поместите свой scrollView в этот HackClipView (с желаемым общим размером прокрутки)

Дополнительные сведения см. В этом ответе.

Обновление: Как указано в ответе lucius, теперь вы можете реализовать протокол UIScollViewDelegate и использовать метод - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset. Поскольку targetContentOffset является указателем. Использование этого метода не гарантирует вам такой же результат для страниц прокрутки, поскольку пользователь может прокручивать сразу несколько страниц. Но установка descelerationRate на fast почти даст вам тот же результат.

person Frade    schedule 16.07.2015