执行查看和弹出时,layoutAttributesForItemAtIndexPath不返回实际位置

时间:2016-02-13 08:14:03

标签: ios iphone 3dtouch

我正在尝试使用以下代码实现Peek和Pop以预览照片库中的图像:

func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    if let indexPath = self.collectionView!.indexPathForItemAtPoint(location), cellAttributes = self.collectionView!.layoutAttributesForItemAtIndexPath(indexPath) {

        previewingContext.sourceRect = cellAttributes.frame
    }

    let selectedPhotoAsset = self.allPhotos[self.selectedPhotoIndexPath![0].item] as! PHAsset

    guard let displayImageDetailVC = storyboard?.instantiateViewControllerWithIdentifier("DisplayImageDetailVC") as? DisplayImageViewController else {
        print("Error instantiate DisplayImageDetail View Controller")
        return nil
    }

    displayImageDetailVC.selectedPhotoAsset = selectedPhotoAsset

    return displayImageDetailVC
}

即使它有效,但问题是在收集视图滚动之后,预览区域有时在尝试查看时不在确切的单元格位置。 enter image description here

有什么方法可以获得细胞的实际位置吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法,结果发现它与registerForPreviewingWithDelegate有关。

而不是

registerForPreviewingWithDelegate(self, sourceView: view)

应该是

registerForPreviewingWithDelegate(self, sourceView: self.collectionView!)