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

2023-12-25

这与其说是一个问题,不如说是对如何解决这个问题的解释。

首先要意识到的是UICollectionView确实继承自UIScrollView- 因此,使用滚动视图的内容进行标准查找是最好的解决方案。

这是我正在解决的问题:

I had a UICollectionView每个单元格中都有不同的项目 - 以及不同类型的单元格。我需要选择一个单元格以使单元格中的图像看起来扩展并占据整个屏幕。我如何进行扩展是另一篇文章的内容。

挑战在于获取单元格在屏幕上的位置,以便动画部分有一个从哪里开始的参考点。

因此,为了方便获取此信息 - 请考虑以下代码:

第一个注意事项:

UICollectionView *picturesCollectionView;
DrawingCell cell; // -> instanceof UICollectionViewCell with custom items.

// first, get the list of cells that are visible on the screen - you must do this every time
// since the items can change...  This is a CRITICAL fact.  You do not go through the
// entire list of cells - only those the collectionView indicates are visible.  Note 
// there are some things to watch out for - the visibles array does not match the indexPath.item
// number - they are independent.  The latter is the item number overall the cells, while
// the visibles array may have only 2 entries - so there is NOT a 1-to-1 mapping - keep
// that in mind.

NSArray *visibles = [self.picturesCollectionView visibleCells];

// now, cycle through the times and find the one that matches some criteria.  In my
// case, check that the cell for the indexPath passed matches the cell's imageView...
// The indexPath was passed in for the method call - note that the indexPath will point
// to the number in your datasource for the particular item - this is crucial.

for (int i=0; i<visibles.count; i++) {
    DrawingCell *cell = (DrawingCell *)visibles[i];
    if (cell.imageView.image == (UIImage *)images[indexPath.item]) {

        // at this point, we've found the correct cell - now do the translation to determine
        // what is it's location on the current screen...  You do this by getting the contentOffset
        // from the collectionView subtracted from the cell's origin - and adding in (in my case)
        // the frame offset for the position of the item I wish to animate (in my case the
        // imageView contained within my custom collection cell...

        CGFloat relativeX = cell.frame.origin.x - self.picturesCollectionView.contentOffset.x + cell.imageView.frame.origin.x;
        CGFloat relativeY = cell.frame.origin.y - self.picturesCollectionView.contentOffset.y + cell.imageView.frame.origin.y;

        // I now have the exact screen coordinates of the imageView - so since I need this
        // to perform animations, I save it off in a CGRect - in my case, I set the size
        // exactly to the size of the imageView - so say you were doing a Flicker display
        // where you wanted to grow a selected image, you get the coordinates of the image
        // in the cell and the size from the displayed image...

        UIImageView *image = cell.imageView;

        // selectedCell is a CGRect that's global for the sake of this code...

        selectedCell = cell.frame;
        selectedCell.origin.x = relativeX;
        selectedCell.origin.y = relativeY;
        selectedCell.size.width = cell.imageView.frame.size.width;
        selectedCell.size.height = cell.imageView.frame.size.height;
    }
}

// done.  I have my coordinates and the size of the imageView I wish to animate and grow...

希望这可以帮助其他人尝试弄清楚如何在单元格上的精确位置上覆盖某些内容,等等......


-(void)collectionView:(UICollectionView *)cv didSelectItemAtIndexPath:(NSIndexPath *)indexPath;
{

UICollectionViewLayoutAttributes *attributes = [cv layoutAttributesForItemAtIndexPath:indexPath];

CGRect cellRect = attributes.frame;

CGRect cellFrameInSuperview = [cv convertRect:cellRect toView:[cv superview]];

NSLog(@"%f",cellFrameInSuperview.origin.x);
}

这对我有用。你可以自己尝试一下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 UICollectionView 获取单元格的屏幕位置 的相关文章

  • 如何在 Monotouch 中对 UIImageView 进行运动模糊效果?

    在 MonoTouch 中进行实时运动模糊的方法是什么 当滚动惯性图片库时 我需要在 UIImageView 上应用运动模糊效果 以强度和方向作为参数 就像在 Photoshop 中一样 我在 CocoaTouch 或 CoreAnimat
  • iPhone - 创建图像网格列表

    我正在开发一个应用程序 它从网站获取图像并使用网格视图向用户显示 例如Apple的照片应用程序 当您点击图像时 我会推送一个显示图像信息和其他内容的视图控制器 实现这个的更好方法是什么 我想到了自定义 UITableViewCell 我见过
  • Xcode 不会在故事板中显示我的文本字段占位符文本

    当我在属性检查器中分配文本字段的占位符值时 它不会显示在故事板中 但是 当我运行应用程序的模拟器时 它就在那里 我缺少什么设置吗 我只想能够在编辑器中看到占位符文本 下面是 xcode 和模拟器之一的屏幕截图 我遇到了同样的问题 幸运的是我
  • 自动布局:Y 位置为两个值中的最大值

    我有一个按钮 play Button 和两个 UIView myView 1 和 myView 2 它们的位置在执行过程中可能会发生变化 我希望 playButton 的顶部比 UIView 1 的底部或 UIView 2 的底部低 10
  • 删除后台 moc 中的对象然后在主 moc 中刷新它会导致 NSFetchedResultsController 更新崩溃

    我遇到了一个NSObjectInaccessibleException我无法理解 Terminating app due to uncaught exception NSObjectInaccessibleException reason
  • Swift 中的弹出视图

    我有一个弹出视图 没有选项卡栏 它弹出到带有选项卡栏的视图控制器 在带有选项卡栏的视图控制器中 我设置了一个单击按钮 以便弹出视图控制器 IBAction func PopUpClicked sender UIButton gt Void
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 适用于 iOS 的 Google Cast SDK 2.3.0 不支持 64 位

    似乎是适用于 iOS 的 Google Cast SDK 2 3 0 版本 https developers google com cast downloads GoogleCastFramework 2 3 0 Release zip停止
  • 自动调整大小完成后如何获取帧大小

    我想知道 如何以及何时 viewDidLoad viewWillAppear viewDidAppear 可以获得自动调整大小以适合其父视图的 UIViews 框架大小 从你的问题中不清楚你为什么想要它 但我想这是为了布局你的子视图 幸运的
  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • iOS 解决方案仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

    我已经为这个问题苦苦挣扎了几天 以前我使用 AFNetworking 类别来加载和缓存图像 但它的回调中没有提供缓存类型 所以我过去常常在每个控制器中跟踪哪些图像已经加载 我浏览了 SDWebImage 它提供了我正在寻找的东西 SDIma
  • 如何在我的 iOS 项目中添加和执行 .sql 文件?

    我找到了很多关于在 iOS 中使用 SQLite 数据库的教程 但没有找到任何直接引用 sql 文件的内容 谁能告诉我如何将现有的 SQL 数据库链接到我的应用程序 编辑 这是一个 MySQL 转储 我们有一个基于浏览器的抽认卡程序 现在我
  • 对 UIImage 进行方形裁剪,导致图像拉伸

    当尝试执行 UIImage 的中心裁剪时 我得到以下结果 左侧是原始图像640 1136 右边是适合正方形的裁剪图像UIImageView at 320 320 turns to 我对比率元素进行了相当多的修改 以便它可以正确检测要修剪的量
  • 尝试从独立的 Apple Watch 应用发出网络请求

    当应用程序是独立应用程序时 Apple Watch 是否无法进行网络通话 即使手表已连接到 iPhone 我正在使用新的独立应用程序目标 它没有附带可以发出 WatchConnectivity 请求的配对 iOS 应用程序 我十有八九收到
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 播放(非库)Apple Music 内容 - 请求失败

    我正在尝试使用以下代码播放专辑 let predicate MPMediaPropertyPredicate value 1459938538 forProperty MPMediaItemPropertyAlbumPersistentID
  • iOS 对 Google 云消息传递的支持

    我在谷歌的开发者控制台中看到 GCM 允许为 iOS 生成 API 密钥 我在网上搜索了有关如何在 iOS 应用程序中通过 GCM 实现推送通知的任何类型的文档 但没有找到答案 真的有可能在 iOS 应用程序中使用 GCM 实现推送通知 j
  • 下标:使用字符串枚举访问我的字典值

    我想做类似的事情 使用字符串枚举访问我的字典值 我试图重载字典的下标但没有成功 访问字典 let district address JsonKeys district 其中 JsonKeys 是 enum JsonKeys String c

随机推荐

  • ssh 与 Subprocess.popen

    大家好 我遇到了一个小问题 可能我错过了一些明显的东西 但我无法找出问题所在 我有 GUI 其中有一个名为 erp 的按钮 如果我按下它 它应该执行ssh首先到一台名为 主机 ID 名称 的机器 ayaancritbowh91302xy 然
  • django:如何从数据库对象的主键散列 URL?

    我正在尝试为我的数据库对象生成 URL 我读了 http agiliq com books djangodesignpatterns misc html do not use primary keys in urls我不应该使用 URL 的
  • 如何在 swift 中从字节数组创建位图图像

    我有一个来自指纹传感器设备的字节数组 我想用它创建一个位图 我尝试了几个例子 但我得到的只是一个 nil UIImage 如果有任何步骤可以做到这一点 请告诉我 Thanks 这就是我的函数的作用 func didFingerGrabDat
  • 如何将所有祖先设置页面包含在 FitNesse 子维基中?

    我在根级别有一个设置页面 工作正常 但是 当我在 FitNesse 中添加子维基时 我想在子维基级别放置一个设置页面 这会被包含在内 但根级别的 SetUp 不会包含在内 例如 具有以下结构 Foo suite SetUp TestPage
  • 如何管理字符串数组中的连续变化值[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个字符串数组 但数组中的值正在不断变化 除了删除项目和更改索引位置之外 还有其他管理数组的方法吗 public int deviceI
  • 使用 Node http 模块上传文件

    如何使用节点 http 模块 并且没有第 3 方库 将文件上传到远程服务器 我尝试了以下方法 但它不起作用 我在服务器上没有收到任何数据 function writeBinaryPostData req filepath var fs re
  • Matlab:比较两个不同长度和不同值的向量?

    假设我有两个长度不同的向量 A 和 BLength A is not equal to Length B 并且向量 A 中的值与向量 B 中的值不同 我想将 B 的每个值与 A 的值进行比较 比较意味着值 B i 是否与向量 B 的值几乎相
  • 为什么“case”和“when > 2”不起作用?

    为什么这不起作用 case ARGV length when 0 abort Error 1 when gt 2 abort Error 2 end 这不是有效的 ruby 语法 你需要的是 case when ARGV length 0
  • Objective-C 中 C++ STL 容器“pair”的等价物?

    我是 Objective C 的新手 所以请不要对我做出太多评价 我想知道 是否有可以在 Objective C 中使用的 C STL 对容器的等效项 我想构建一个包含与 NSBool 关联的 NSInteger 的数组 我知道我可以使用一
  • 我可以有一个没有模型的 Django 表单吗

    我的模板中可以有一个不受模型支持的表单吗 我不需要存储数据 只需要该数据在视图中生成我自己的 POST 请求 模板 带有文本字段的表单 查看 从表单获取数据 并生成另一个请求 Flow gt 表单提交获取调用视图的 url def form
  • 如何收到进入挂起模式的通知?

    我希望当系统即将挂起或睡眠 之前 时通知我的应用程序 无论是否获取唤醒锁 我不想禁止该过程 而只想收到通知 谢谢 L None
  • Google Chrome 弹出扩展中的 Javascript 未运行

    嗨 我遇到了一个非常奇怪的问题 我有一个基本的 chrome 扩展 它有一个默认的 popup html 文档 定义如下 p Hello p
  • 从 Django REST 框架中的响应中删除计数、下一个、上一个

    当我在 API 上执行 GET 时 结果中始终包含以下内容 count 2013 next http 127 0 0 1 8000 api items page 2 previous null results 如何删除计数 下一个和上一个字
  • java - 该进程无法访问该文件,因为该文件正在被另一个进程使用

    我有一段代码可以监视目录中是否添加文件 每当一个新文件添加到目录中时 该文件的内容就会被选取并发布到 kafka 上 然后该文件将被删除 当我发出单个请求时 这是有效的 但一旦我将我的代码接受来自 jMeter 的 5 或 10 个用户请求
  • BST的递归插入

    我已经制作了一个使用循环插入 BST 的函数 并且它工作得很好 现在 当我编写使用递归来执行此操作时 我不知道为什么它不能正常工作 但是根据我的逻辑 逻辑是正确的 似乎没有新节点被添加到 BST 树中 并且在插入函数结束后树头再次变为 NU
  • 抓取整个网站[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找有关抓取和下载整个公司网站的程序的建议 该网站由已停止工作的 CMS 提供支持 修复它的成本很
  • 使用单元格公式从文件路径获取父文件夹路径

    栏内A我有 20000 行 文件名和文件路径 C person microsoft ygkyg mmddyy 文件名 xls server 41 performance mmddyy 文件名 doc etc 栏内B我只想获取父文件夹路径 有
  • PHP htmlspecialchars 错误

    为什么会这样 trader details array walk trader details htmlspecialchars 给出这个错误 Severity Warning Message htmlspecialchars expect
  • ASP.NET:验证用于选择日期(月、日、年)的 3 个下拉框的最佳方法是什么?

    我有两组用于开始日期和结束日期的下拉菜单 每个日期都是通过从 3 个单独的下拉列表中选择月 日和年来创建的 目前 我在所有下拉列表中都有RequiredFieldValidators 如果尚未选择任何内容 则仅显示 但我需要验证结束日期是否
  • 从 UICollectionView 获取单元格的屏幕位置

    这与其说是一个问题 不如说是对如何解决这个问题的解释 首先要意识到的是UICollectionView确实继承自UIScrollView 因此 使用滚动视图的内容进行标准查找是最好的解决方案 这是我正在解决的问题 I had a UICol