Я создаю базовый эффект параллакса, очень похожий на переключатель приложений iOS7, используя два экземпляра UIScrollView
(cardScrollView
и tileScrollView
). Прокручиваю один рядом с другим, с разной скоростью, например, так:Parallax UIScrollView - обработка двух представлений одним методом scrollViewDidScroll?
if ([scrollView isEqual:self.tileScrollView]) {
[self.cardScrollView setContentOffset:CGPointMake((self.tileScrollView.contentOffset.x + 110) * TILE_CARD_DELTA,
self.cardScrollView.contentOffset.y)];
}
Это прекрасно работает при прокрутке tileScrollView
. Тем не менее, я хотел бы, чтобы то же самое работало в обратном направлении, то есть я могу прокручивать cardScrollView
и иметь соответственно tileScrollView
. Проблема, с которой я сталкиваюсь, заключается в том, что вызов setContentOffset
фактически вызывает cardScrollView
, чтобы позвонить самому scrollViewDidScroll
, что означает, что они постоянно пытаются установить друг друга в одно и то же время, и все виды ада разрываются.
В принципе, проблема в том, что оба экземпляра scrollView
полагаются на то же самое scrollViewDidScroll
, и поэтому я не могу различать их между собой.
Как я могу обойти эту?
Если вы хотите сделать что-то подобное, что вы будете иметь, чтобы настроить вручную панорамирование и прокрутка. Наличие одного элемента управления представлением другого, который может управлять первым представлением, - это в основном круговая команда. Один установит другой, который установит первый, который установит второй и т. Д. Если вы сделаете супервизор, получите сенсорные события и сделайте scrollview не userInteractionable, вы сможете достичь того, что ищете. – Putz1103
Не могу ли я просто назначить другого делегата? – Luke
Оба метода делегата по-прежнему будут вызываться и попытаться настроить другое scrollview. Это круговой независимо от того, как вы это делаете. Вам нужно одно представление, которое охватывает как прокрутки, так и ручное управление их движением. – Putz1103