A UIScrollViewз увімкненим підкачуванням зупиниться на кратному його ширині (або висоті) кадру. Отже, перший крок - з’ясувати, наскільки широкими ви хочете, щоб були ваші сторінки. Зробіть так, щоб ширина UIScrollView. Потім встановіть розміри підпрогляду, якими б великими вони вам не були, та встановіть їх центри, виходячи з кратних UIScrollViewширині.
Тоді, так як ви хочете , щоб побачити інші сторінки, звичайно, встановити clipsToBoundsна NOяк зазначено mhjoy. Зараз фокус полягає в тому, щоб прокрутити його, коли користувач починає перетягування поза діапазоном UIScrollViewкадру. Моє рішення (коли мені довелося це зробити зовсім недавно) було таким:
Створіть UIViewпідклас (тобто ClipView), який міститиме UIScrollViewпідзаголовки і це. По суті, він повинен мати рамки того, що, як ви вважаєте, було UIScrollViewб за звичайних обставин. Розмістіть UIScrollViewв центрі ClipView. Переконайтеся, що для параметра ClipViews 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: Юрі Пакасте, якщо у вас виникли проблеми з взаємодією користувача з підзаголовком.