collectionView

self.myCollectionView.userInteractionEnabled = YES;
self.view.clipsToBounds = NO;
self.myCollectionView.clipsToBounds = NO;

假设我的myCollectionView是这么多(115,0,200,100),如果设置成上面的那样的话,你会发现,你的collectionview的大小回“悬浮”在背景的上空!并且collectionview的cell 会超出 115的范围。因为,你设置了,上面的属性为 NO了。

-- 下面的几个方法,到时在一一解释,实在太忙了。

- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition;

[self.collectionView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

// 通过目标移动的偏移量, 提取期望偏移量  (一般情况下,期望偏移量,就是 目标偏移量)
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
{
 // 根据偏移量 , 确定区域
 CGRect rect = CGRectMake(proposedContentOffset.x, 0, self.collectionView.frame.size.width, self.collectionView.frame.size.height); 
 // 将屏幕所显示区域的 元素布局 取出。
 NSArray *layoutAtts = [super layoutAttributesForElementsInRect:rect];
 CGFloat minMargin = MAXFLOAT;
 CGFloat collectionViewCenterX = self.collectionView.frame.size.width * 0.5;
 CGFloat contentOffsetX = proposedContentOffset.x;
 // 取出区域内元素, 并根据其中心位置, 与视图中心位置 进行比较, 比出最小的距离差
 for (UICollectionViewLayoutAttributes *layoutAtt in layoutAtts) {
     CGFloat margin = layoutAtt.center.x - contentOffsetX - collectionViewCenterX;
     if (ABS(margin) < ABS(minMargin)) {
         minMargin = margin;  
     }
 }
  NSLog(@"%f",minMargin);
 // 期望偏移量 加上差值, 让整体,沿差值 反方向移动,这样的话, 最近的一个,刚好在中心位置
 proposedContentOffset.x += minMargin;
 return proposedContentOffset;
}
最近工作忙,会不时跟新。。。。

你可能感兴趣的:(collectionView)