Пейджинг UIScrollView с просмотром соседних страниц - PullRequest
10 голосов
/ 17 сентября 2010

Посмотрите на приложение App Store на iPhone или iPad, особенно на экране подробностей приложения, который показывает скриншоты. Вьюер скриншотов показывает скриншот, на который вы смотрите, и края следующего и предыдущего. Мне нужно реализовать нечто подобное.

То, как я это сделал, справедливо для бедных: я создал UIScrollView, включил разбиение на страницы и выложил свой контент. Я сделал рамку такого же размера, что и страница контента, но меньше, чем экран. Затем я отключил clipToBounds, поэтому все, что находится за рамкой ScrollView, все равно будет нарисовано. Теперь я могу ВИДЕТЬ края соседних страниц, но они находятся вне ScrollView и поэтому не могут получать прикосновения прокрутки. Приложение App Store позволяет вам коснуться всей ширины этой вещи, включая заглядывающие края соседних страниц.

Так как они это сделали?

Ответы [ 3 ]

18 голосов
/ 17 сентября 2010

Вам необходимо добавить вид «позади» вида прокрутки, который охватывает всю область, где будут видны ваши страницы. Это представление должно реализовывать -hitTest: withEvent :. Этот метод вызывается операционной системой, чтобы определить, куда направить конкретное сенсорное событие. Все, что вам нужно сделать, это вернуть представление прокрутки для любых точек в этом режиме поддержки:

Objective-C

- (UIView *) hitTest: (CGPoint) pt withEvent: (UIEvent *) event {
    if (CGRectContainsPoint(self.bounds, pt)) return self.scrollView;
    return [super hitTest: pt withEvent: event];
}

Swift 4.0

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    return self.bounds.contains(point) ? self.scrollView : super.hitTest(point, with: event)
}
1 голос
/ 01 мая 2013

У меня недостаточно высокий рейтинг, чтобы комментировать ответы выше, но вы можете найти учебное пособие и пример кода на сайте Рэя Вендерлиха: Как использовать UIScrollView для прокрутки и масштабирования контента

Этот код использует методы, перечисленные выше, в частности логику проверки попадания.

0 голосов
/ 17 ноября 2011

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

Следующий пример верен, если вы поместили содержимое прокрутки в дополнительный контейнер. Если это не так, переберите подпредставления и верните тот, который попал под ваше прикосновение.

- (UIView*)hitTest:(CGPoint)pt withEvent:(UIEvent*)event 
{
    UIView *contentView = [self.subviews count] ? [self.subviews objectAtIndex:0] : nil;
    return [contentView hitTest:pt withEvent:event];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...