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<NSString *,id> *)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];