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;
}