ios swift uicollectionview 3dtouch peek-pop

ios - La vista previa Peek/Pop ignora el radio de la esquina de la celda en la vista de colección



swift uicollectionview (1)

Como te entiendo correctamente, quieres tener algo como primero, en lugar de segundo:

El problema es que registra notificaciones en vista completa. Algo como esto: registerForPreviewingWithDelegate(self, sourceView: self.view) , que registerForPreviewingWithDelegate(self, sourceView: self.view) por qué su área tocada no sabe nada acerca de la capa de celda.

Lo que debe hacer: registrar cada celda personalmente:

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) } }

Y simplemente cambie previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView) a previewingContext.sourceRect = cell.bounds

PS Por supuesto, no te olvides de eliminar registerForPreviewingWithDelegate en tu vista :)

He agregado la funcionalidad 3D Touch Peek / Pop a mis celdas de vista de colección y funciona muy bien, sin embargo, he notado que el marco de vista previa no respeta el radio de la esquina de las celdas.

Aquí está mi función de vista previa:

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 }

Intenté establecer el radio de la esquina de previewViewContext sourceView y jugar con masksToBounds en la celda, pero nada de lo que he intentado hasta ahora me ha ayudado.

Aquí está la configuración de la celda:

override func awakeFromNib() { self.layer.cornerRadius = 7 }

¿Alguien tiene alguna sugerencia?