0

Я создаю базовый эффект параллакса, очень похожий на переключатель приложений 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, и поэтому я не могу различать их между собой.

Как я могу обойти эту?

+0

Если вы хотите сделать что-то подобное, что вы будете иметь, чтобы настроить вручную панорамирование и прокрутка. Наличие одного элемента управления представлением другого, который может управлять первым представлением, - это в основном круговая команда. Один установит другой, который установит первый, который установит второй и т. Д. Если вы сделаете супервизор, получите сенсорные события и сделайте scrollview не userInteractionable, вы сможете достичь того, что ищете. – Putz1103

+0

Не могу ли я просто назначить другого делегата? – Luke

+0

Оба метода делегата по-прежнему будут вызываться и попытаться настроить другое scrollview. Это круговой независимо от того, как вы это делаете. Вам нужно одно представление, которое охватывает как прокрутки, так и ручное управление их движением. – Putz1103

ответ

0

Вы получаете ссылку обоих в этом методе и работать в соответствии с требованием:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

{ 
    if (scrollView == self.tileScrollView) { 
     // do something 
    } 
    else { 
     // do something 
    } 
    } 
+0

Нет, это не сработает. Метод вызывается сначала одним, а затем другим, поэтому оба этих условных случая будут ударяться каждый раз. – Luke

+0

Что вы хотите, ...? –

+0

@ lukech..you сказал isssue: В принципе, проблема здесь в том, что оба экземпляра scrollView полагаются на один и тот же scrollViewDidScroll, и поэтому я не могу различать их между собой там ... Можете ли вы рассказать свой Требование снова –

Смежные вопросы