无法获取collectionViewCell项的框架进行过渡

时间:2018-02-22 10:09:31

标签: ios swift xcode collectionview uiviewanimationtransition

我正在尝试将视图转换为另一个viewController的collectionViewCell的imageView。为此,我需要将collectionViewCell中的imageView框架转换为Window。

我正在尝试使用viewWillAppear中的以下内容:

let indexPath = IndexPath(item: 0, section: 0)
let cell = collectionView.cellForItem(at: indexPath) as! ImageCollectionViewCell
let boundingRect = cell.imageView.convert(cell.imageView.bounds, to: nil)

boundingRect的大小是正确的但是由于某种原因,原点是0,0而不是它应该在的位置。

我想知道问题是否尚未布置collectionView,因此原点是错误的。如果是这种情况,我该如何强制它进行布局。我试过了:

collectionView.setNeedsLayout()
collectionView.layoutIfNeeded()

但这也没有改变原点。

如何在viewDidAppear之前强制使用collectionView的布局并获取特定单元格(或该单元格中的imageView)的框架。我想避免在viewWillLayoutSubviews或viewDidLayoutSubviews中执行此操作以防止此操作持续运行。

1 个答案:

答案 0 :(得分:2)

根据https://developer.apple.com/documentation/uikit/uiview/1622498-convert我们需要:

  • view(collectionView.superview),我们想要获取子视图 位置,
  • subview的框架(cell.imageView.frame)
  • 和子视图的superview或superview.superview等,包含子视图框架(单元格)的任何视图

我们得到了

let boundingRect = collectionView.superview.convert(cell.imageView.frame, from: cell)