Просмотр 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
}
Я попытался установить угловой радиус предварительного просмотра контекста sourceView и поиграть с masksToBounds в ячейке, но ничего, что я пробовал до сих пор, не помогло.
Вот настройка ячейки:
override func awakeFromNib() {
self.layer.cornerRadius = 7
}
У кого-нибудь есть предложения?
1 ответ
Как я вас правильно понимаю, вы хотите иметь что-то вроде первого, а не второго:
Проблема в том, что вы регистрируете уведомление на весь вид. Что-то вроде этого: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)
}
}
И просто поменяй previewingContext.sourceRect = self.view.convertRect(cell.frame, fromView: self.scholarsCollectionView)
в previewingContext.sourceRect = cell.bounds
PS Конечно, не забудьте удалить registerForPreviewingWithDelegate
на ваш взгляд:)