ios - Peek和Pop - 将UIImageView的角半径保持在UITableViewCell内的UICollectionView中

时间:2017-02-22 18:09:10

标签: ios swift uitableview 3dtouch peek-pop

我的观点结构如下:

UITableView
|    
+-- MyTableViewCell
|  |  
|  +-- UICollectionView
|     |  
|     +-- MyCollectionViewCell
|       |  
|       +-- UIImageView

UIImageView被命名为“icon”,其图层具有一定的角半径。 我已经为集合视图中的项目实现了Peek和Pop,它可以工作,但我无法弄清楚如何在预览框架中包含图像的圆角半径。

这是我注册tableView进行预览的方法:

if #available(iOS 9.0, *), traitCollection.forceTouchCapability == .available {
    registerForPreviewing(with: self, sourceView: tableView)
}

这是我的预览功能(灵感来自here):

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {

    guard let indexPath = tableView.indexPathForRow(at: location) else { return nil }
    guard let cell = tableView.cellForRow(at: indexPath) as? MyTableViewCell else { return nil }

    guard let collectionIndex = cell.collectionView.indexPathForItem(at: self.view.convert(location, to: cell.collectionView)) else { return nil }

    guard let collectionViewCell = cell.collectionView.cellForItem(at: collectionIndex) as? MyCollectionViewCell else { return nil }
    let iconRect = tableView.convert(collectionViewCell.icon.frame, from: collectionViewCell.icon.superview!)
    previewingContext.sourceRect = iconRect

    return someViewController

}

这是我在提交新视图控制器之前强制触摸图像时在预览框中得到的内容(因此外部模糊):

image1

这就是我想要实现的,保留图像的圆角半径(来自App Store的截图):

image2

通过阅读other posts我认为问题在于我注册了整个tableView以进行预览,而不是其单元格。但是,我找不到适用于Table View单元格内的Collection View单元格的解决方案。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

你可以覆盖UIImageView并创建某种自定义绘图功能吗?

答案 1 :(得分:0)

您是否尝试使用其cellAttributes而不是转换框架?如果单元格的contentView.layer上有cornerRadius,这将记住这一点。所以这样的事情对我们有用:

let cellAttributes = collectionView.layoutAttributesForItem(at: indexPath)

previewingContext.sourceRect = cellAttributes.frame