第04天实战技术(16):UICollectionView定位
2017-03-30 00:00
232 查看
#####一、UICollectionView定位
0.获取最终显示的区域
1.获取最终显示的cell
2.记录最小间距
3.计算中心点的距离
4.重新设置最终的偏移量
5.bug处理(-0)
code
定位效果:控制偏移量 0.获取最终显示的区域 1.获取最终显示的cell 2.记录最小间距 3.计算中心点的距离 4.重新设置最终的偏移量 5.bug处理(-0)
0.获取最终显示的区域
CGRect targerRect = CGRectMake(targetP.x, 0, collectionViewW, MAXFLOAT);
1.获取最终显示的cell
NSArray *attrs = [super layoutAttributesForElementsInRect:targerRect];
2.记录最小间距
CGFloat minDelta = MAXFLOAT;
3.计算中心点的距离
for (UICollectionViewLayoutAttributes *attr in attrs) { // 获取中心点的距离 CGFloat delta = (attr.center.x - self.collectionView.contentOffset.x) - self.collectionView.bounds.size.width * 0.5; if (fabs(delta) < fabs(minDelta) ) { minDelta = delta; } }
4.重新设置最终的偏移量
targetP.x += minDelta;
5.bug处理(-0)
if (targetP.x < 0) { targetP.x = 0; }
code
#pragma 5.确定最终的偏移量 和 手指离开的偏移量
// 什么时候调用 : 用户手指一松开就会调用
// 作用 : 确定最终的偏移量
// 定位 : 距离中心点越近, 最终展示到中心点
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
{
// NSLog(@"调用了 %s",__func__);
// 拖动比较快的时候 最终偏移量 是否等于 手指离开的偏移量 (不等于,因为滚动太快 还有一个缓存)
// 最终偏移量
CGPoint targetP = [super targetContentOffsetForProposedContentOffset:proposedContentOffset withScrollingVelocity:velocity];
CGFloat collectionViewW = self.collectionView.bounds.size.width;
// 0.获取最终的显示的区域
CGRect targerRect = CGRectMake(targetP.x, 0, collectionViewW, MAXFLOAT);
// 1.获取最终显示的cell
NSArray *attrs = [super layoutAttributesForElementsInRect:targerRect];
// 记录最小间距
CGFloat minDelta = MAXFLOAT;
for (UICollectionViewLayoutAttributes *attr in attrs) { // 获取中心点的距离 CGFloat delta = (attr.center.x - self.collectionView.contentOffset.x) - self.collectionView.bounds.size.width * 0.5; if (fabs(delta) < fabs(minDelta) ) { minDelta = delta; } }
targetP.x += minDelta;
if (targetP.x < 0) { targetP.x = 0; }
NSLog(@"%f",targetP.x);
return targetP;
}
相关文章推荐
- 第04天实战技术(13):UICollectionView基本使用(抽取方式2)
- 第04天实战技术(12):UICollectionView基本使用(抽取方式1)
- 第04天实战技术(01):block开发使用场景(保存代码)
- 第04天实战技术(11):UICollectionView基本使用(布局)
- 第03天实战技术(16):Bounds和Frame简介
- 第04天实战技术(10):UICollectionView基本使用
- tensorflow55 《TensorFlow技术解析与实战》16 TensorFlow Debugger
- 第04天实战技术(09):block开发中使用场景(返回值)
- 第04天实战技术(08):Block开发使用场景(参数使用)
- 第04天实战技术(07):Block变量传递
- 第04天实战技术(06):Block循环引用
- 第04天实战技术(05):Block内存管理(ARC)
- 第04天实战技术(04):Block内存管理(MRC)
- 第04天实战技术(03):block开发使用场景(传值)
- 第04天实战技术(02):block开发使用场景(代理传值)
- 第04天实战技术(15):UICollectionView计算布局尺寸
- 第02天实战技术(16):父子控制器的重要性(modal)
- 第04天实战技术(14):UICollectionView自定义布局方法
- 第02天实战技术(15):父子控制器的重要性(push)
- 第03天实战技术(03):网易新闻(处理标题按钮点击)