UICollectionView:获取屏幕位置的单元格

Posted

技术标签:

【中文标题】UICollectionView:获取屏幕位置的单元格【英文标题】:UICollectionView: Get cell at screen position 【发布时间】:2013-09-10 20:48:28 【问题描述】:

我有一个使用 JSON 填充的 UICollectionView。这是带有电影海报的封面流式布局。

我想知道是否有办法让我在屏幕上的某个点显示单元格的标题属性,以便当我水平滚动时,显示最中心可见单元格的标题。

我尝试过使用 indexPathForItemAtPoint,但该点似乎随着集合视图滚动,始终显示相同的索引。

编辑:添加代码:

UIView *test = [[UIView alloc] initWithFrame:CGRectMake(10, 30, self.view.frame.size.width+180, 390)];
test.backgroundColor = [UIColor clearColor];
superView.backgroundColor = [UIColor blackColor];


PerspectiveFlowLayout *layout = [[PerspectiveFlowLayout alloc]init];
self.boxes.bounces = NO;

BoxView *boxes = [[BoxView alloc] initWithFrame:test.frame collectionViewLayout:layout];


[test addSubview:boxes];
[superView addSubview: test];
NSIndexPath *path = [self.boxes indexPathForItemAtPoint:[self.boxes convertPoint:CGPointMake(100.0, 100.0) toView:[self.boxes superview]]];

Cell *atpoint = [self.boxes cellForItemAtIndexPath:path];


NSLog(@"%@", atpoint.model.name);

非常感谢您的帮助, 洛根

【问题讨论】:

你能粘贴一个你正在使用的代码吗? indexPathForItemAtPoint 应该可以解决您的问题,也许您在子视图中使用了错误的点坐标。你在任何地方使用 convertPoint 吗? 我的盒子 UICollectionView 作为 UIView 的子视图,大约在页面的中间。它水平滚动。我做了: NSIndexPath *path = [self.boxes indexPathForItemAtPoint: CGPointMake(100.0, 300.0)]; 确实会返回第一张海报,但是当我滚动时,每次调用它都会继续返回第一张海报。 如果您可以粘贴一些代码,将会很有帮助。我认为你应该使用类似的东西:[self.boxes convertPoint:self.boxes.center toView:[self.boxes superview]]。但我需要一些代码让它更准确。 我添加了它,它似乎具有相同的行为。我把上面的代码贴出来了。 【参考方案1】:

在进行转换点时尝试交换项目,这样您就可以从超级视图转到集合视图:

NSIndexPath *path = [self.boxes indexPathForItemAtPoint:[[self.boxes superview] convertPoint:CGPointMake(100.0, 100.0) toView:self.boxes]];

【讨论】:

以上是关于UICollectionView:获取屏幕位置的单元格的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 与屏幕上任何位置的单元格

如何调整 uicollectionview 单元格中 imageview 的位置?

UICollectionView的使用

在 scrollToItemAtIndexPath 之后获取 UICollectionView 单元格位置

屏幕旋转后如何在 UICollectionView 中跟踪单元格的移动

Swift 在 UITableViewCell 内的 UICollectionView 的单选/多选模式下进行选择/取消选择