Программирование UIScrollView кажется мне одной из самых сложных задач: (
У меня есть подпредставления в UIScrollView.
Я хочу разрешить подпредставлениям сначала получать сенсорное событие (и перетаскивать).
Когда подпредставления думают, что должны отказаться от прикосновений, и должна начаться прокрутка, он должен иметь возможность сообщить об этом scrollView.
Я экспериментировал с touchesShouldCancelInContentView, но этот метод вызывается только один раз, когда scrollView считает, что пользователь действительно намеревался 'scroll '.
Мне нужно взять под контроль, когда отменить сенсорное событие для подпредставлений, не зависящих от реализации внутреннего uiscrollview.
Моя лучшая стратегия на данный момент - это
подкласс ScrollView
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
SYSLOG(LOG_DEBUG, "MyScrollView touchesBegan");
if (!self.dragging && self.isSubviewTouchable)
[self.nextResponder touchesBegan: touches withEvent:event];
[super touchesBegan: touches withEvent: event];
}
и из подпредставления scrollView
, когда подпредставлению нужно снять касание и позволить scrollView принимать события касания и т. Д.
self.myScrollView.isSubviewTouchable = false;
[self touchesEnded: touches withEvent: event];
и в классе делегатов scrollView яустановите значение bool обратно.
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
self.myScrollView.isSubviewTouchable = true;
}
Проблема в том, что вызов touchesEnded из подпредставления не активируетсяВыпустите сенсорное событие, как кажется. (подпредставление перетаскивается даже после вызова touchesEnded) Кроме того, я не вижу, чтобы scrollView получал какое-либо событие касания после вызова touchesEnded, который, как я надеялся, будет.
Любые идеи?
Спасибо