A UIScrollView
з увімкненим підкачуванням зупиниться на кратному його ширині (або висоті) кадру. Отже, перший крок - з’ясувати, наскільки широкими ви хочете, щоб були ваші сторінки. Зробіть так, щоб ширина UIScrollView
. Потім встановіть розміри підпрогляду, якими б великими вони вам не були, та встановіть їх центри, виходячи з кратних UIScrollView
ширині.
Тоді, так як ви хочете , щоб побачити інші сторінки, звичайно, встановити clipsToBounds
на NO
як зазначено mhjoy. Зараз фокус полягає в тому, щоб прокрутити його, коли користувач починає перетягування поза діапазоном UIScrollView
кадру. Моє рішення (коли мені довелося це зробити зовсім недавно) було таким:
Створіть UIView
підклас (тобто ClipView
), який міститиме UIScrollView
підзаголовки і це. По суті, він повинен мати рамки того, що, як ви вважаєте, було UIScrollView
б за звичайних обставин. Розмістіть UIScrollView
в центрі ClipView
. Переконайтеся, що для параметра ClipView
s clipsToBounds
встановлено значення, YES
якщо його ширина менше ширини батьківського подання. Крім того, ClipView
потрібне посилання на UIScrollView
.
Останній крок - перевизначення - (UIView *)hitTest:withEvent:
всередині ClipView
.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
Це в основному розширює область дотику UIScrollView
до рамки зору батьків, саме те, що вам потрібно.
Іншим варіантом може бути підклас UIScrollView
і перевизначення його - (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
методу, однак вам все одно знадобиться подання контейнера для відсікання, і може бути важко визначити, коли повертати, YES
виходячи лише з UIScrollView
кадру '.
ПРИМІТКА. Вам також слід поглянути на модифікацію hitTest: withEvent: Юрі Пакасте, якщо у вас виникли проблеми з взаємодією користувача з підзаголовком.