2013-04-10 1 views
1

Я создал UICollection с пользовательским макетом, позволяющим прокручивать как вертикальные, так и горизонтальные. Это сетка одинаковых разделов и элементов в каждом разделе (то есть 10 x 10, 20 x 20 и т. Д.). Я хотел бы иметь возможность поставить два заголовка, которые остаются в поле зрения, один сверху и один по левой стороне. Я не нашел способ сделать это в самом UICollection. Итак, я установил UICollection слева, а другой вверху. Однако, когда пользователь прокручивает сетку влево и вправо и/или вверх и вниз, я хочу, чтобы эти две коллекции отражали эти движения.Зеркальная прокрутка UICollection

Итак, мой вопрос: есть ли способ отразить горизонтальное перемещение основного UICollection до верхнего UICollection, а затем отразить вертикальное перемещение основного UICollection в сторону UICollection?

Спасибо!

ответ

0

Итак, я понял. Использование self.mainCollectionView.contentOffset всегда возвращалось (0,0), поэтому попытался использовать имя объекта, которое я действительно назначил ему через Storyboard и контроллер представления. Это сработало.

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    [self synchronizeCollectionViewContentOffsets]; 
} 

-(void)synchronizeCollectionViewContentOffsets { 
    CGPoint offset = myCollectionView.contentOffset; 
    myLeftMargin.contentOffset = CGPointMake(0, offset.y); 
    myTopMargin.contentOffset = CGPointMake(offset.x, 0); 
} 

Где myCollectionView, myLeftMargin и myTopMargin связаны с UICollectionViews через раскадровки.

1

UICollectionView является подклассом UIScrollView. Он отправляет делегату все сообщения, определенные в UIScrollViewDelegate protocol.

Сообщение, на которое вы хотите ответить, равно scrollViewDidScroll:. Когда ваше главное представление коллекции отправит это сообщение, вы хотите ответить на него, получив его contentOffset и применив смещение к вашим представлениям по маркеру, если это необходимо.

// Implement this in your main collection view's delegate. 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    [self synchronizeCollectionViewContentOffsets]; 
} 

- (void)synchronizeCollectionViewContentOffsets { 
    CGPoint offset = self.mainCollectionView.contentOffset; 
    self.leftMarginView.contentOffset = CGPointMake(0, offset.y); 
    self.topMarginView.contentOffset = CGPointMake(offset.x, 0); 
} 
+0

Когда открывается первое представление, оно автоматически прокручивается в определенную ячейку основного UICollectionView, это действительно влияет на метод scrollViewDidScroll, который затем обращается к методу синхронизации; однако точка смещения, созданная в первой строке, в основном равна 0,0, даже когда прокрученная точка не приближается к ней. Это тот случай, когда я пытаюсь прокручивать сетку. Созданная точка смещения всегда равна 1.343243x-34 или что-то в этом роде. –