Почему мой подкласс UIView не получает прикосновения, перемещенные в UIScrollView? - PullRequest
3 голосов
/ 15 января 2010

У меня есть класс с именем Boards, и это подкласс UIView, я выделил экземпляр этого и поместил его в UIScrollView, я хочу вместо того, чтобы он касался перехода к UIScrollView, но Подвид: Доски (UIView), я просто не знаю, как передать прикосновения от UIScrollView к UIView.

P.S: Я буду менять contentOffset UIScrollView вручную, поэтому мне не нужны касания в UIScrollView, а в UIView.

P.S .: UIView получает событие touchesEnded и touchesBegan, но не touchesMoved

Ответы [ 4 ]

2 голосов
/ 15 января 2010

Если вы хотите, чтобы UIScrollView прокручивал только программно, вы должны создать его подкласс и переопределить методы touchesBegan / Moved / Cancelled / Ended. Даже тогда у вас могут быть проблемы. UIScrollView не был разработан, чтобы игнорировать пользовательский ввод.

Если возможно, вы должны заменить UIScrollView на пользовательский вид. Вместо изменения contentOffset вы можете изменить свойство представления transform, чтобы перемещать его содержимое.

Или вы можете вкладывать два вида, внешний вид и внутренний вид. Поместите ваш досок вид внутри. Затем, вместо изменения contentOffset, измените внутренний вид frame.

Если анимация важна, я уверен, что второй вариант обеспечит анимированный переход, и первый тоже может.

0 голосов
/ 04 сентября 2010

Новые обновления по этому вопросу здесь (включая ссылку на исходный код ZoomScrollView + некоторые отличные пояснения по внутренним компонентам UIScrollView).
Кроме того, посмотрите обновленный пример Apple ScrollViewSuite . Это ваш описанный сценарий в 3-м примере.

0 голосов
/ 15 января 2010

Почему бы вам не создать подкласс UIScrollView? Затем передайте все события касания, полученные подклассом, в UIView следующим образом.

@implementation SubclassOfScrollView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.nextResponder touchesBegan:touches withEvent:event];
}

@end
0 голосов
/ 15 января 2010

Попробуйте отключить delaysContentTouches в просмотре прокрутки. Это немедленно перенаправит все дочерние касания непосредственно на дочерние представления, не проверяя, является ли это касанием прокрутки .

...