use*_*428 3 ios uicollectionview swift 3dtouch peek-pop
我已将3D Touch Peek/Pop功能添加到我的集合视图单元格中并且效果很好,但是我注意到预览框架不尊重单元格的角半径.
这是我的预览功能:
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
let viewController = storyboard?.instantiateViewControllerWithIdentifier("scholarDetailViewController") as? ScholarDetailViewController
let cellPosition = self.scholarsCollectionView.convertPoint(location, fromView: self.view)
let cellIndex = self.scholarsCollectionView.indexPathForItemAtPoint(cellPosition)
guard let previewViewController = viewController, indexPath = cellIndex, cell = self.scholarsCollectionView.cellForItemAtIndexPath(indexPath) else {
return nil
}
let scholar = self.searchBarActive ? self.searchResults[indexPath.item] as! Scholar : self.currentScholars[indexPath.item]
previewViewController.setScholar(scholar.id)
previewViewController.delegate = self
previewViewController.preferredContentSize = CGSize.zero
previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView)
return previewViewController
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试设置previewingContext sourceView的角半径,并在单元格上使用masksToBounds,但到目前为止我没有尝试过任何帮助.
这是单元设置:
override func awakeFromNib() {
self.layer.cornerRadius = 7
}
Run Code Online (Sandbox Code Playgroud)
有人有什么建议吗?
正如我理解你的那样,你想拥有第一个而不是第二个:
问题是您在整个视图上注册通知.这样的事情:
registerForPreviewingWithDelegate(self, sourceView: self.view)那就是为什么你所触摸的区域对细胞层一无所知.
你应该做什么 - 亲自登记每个细胞:
func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
let previwingController = registerForPreviewingWithDelegate(self, sourceView: cell)
previwingControllers[cell] = previwingController
}
func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
if let previwingController = previwingControllers[cell] {
unregisterForPreviewingWithContext(previwingController)
}
}
Run Code Online (Sandbox Code Playgroud)
然后换previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView)到previewingContext.sourceRect = cell.bounds
PS当然不要忘记删除registerForPreviewingWithDelegate你的视图:)
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |