设置两个collectionView的联动效果!

KVO在我们的App的设置中用途非常广泛,今天我们讲的这个联动效果就需要用到KVO

1.在collectionView1 中设置页码,即每个cell的偏移值,然后运用到代理方法

//将要结束拖拽(手指离开屏幕的的那一刻)
//该方法需要将pagingEnabled关掉才可以使用
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    
    NSLog(@"---------");
    NSLog(@"滑动的速度%lf",velocity.x);
    NSLog(@"松手时x方向的偏移量:%lf",scrollView.contentOffset.x);
    //targetContentOffset是个指针,可以修改参数.
    NSLog(@"目标的最终的偏移量:%lf",targetContentOffset->x);
    
    //1 根据偏移量判断一下应该显示第几个item
    CGFloat offSetX = targetContentOffset->x;
    
    CGFloat itemWidth =80;
    
    //item的宽度+行间距 = 页码的宽度
    NSInteger pageWidth = itemWidth+10;
    
    
    //根据偏移量 计算是 第几页
    NSInteger pageNum = (offSetX+pageWidth/2)/pageWidth;
    
    NSLog(@"pageNumber= %ld",pageNum);
    
    //2 根据显示的第几个item,从而改变偏移量
    targetContentOffset->x = pageNum*pageWidth;
    //设置currentIndex属性,接收这个页码
    self.currentIndex = pageNum;
}

2.在collectionView2中设置观察者

      [smallCollectionV addObserver:self
                           forKeyPath:@"currentIndex" //监听的属性
                              options:NSKeyValueObservingOptionNew context:nil];

3.改变collectionView2的item 即页码

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

    NSInteger index = [[change objectForKey:@"new"]integerValue];
   //转成index 
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:index inSection:0];
//实时转换页面
    [largeCollectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
    
    

设置两个collectionView的联动效果!_第1张图片
1

设置两个collectionView的联动效果!_第2张图片
2

你可能感兴趣的:(设置两个collectionView的联动效果!)