как получить indexPath для ячейки, которая расположена в центре UICollectionView

Как я могу найти indexPath для cell в середине UICollectionView ?

У меня горизонтальная прокрутка, и видна только одна большая cell (частично видны две другие cell на сторонах). Мне нужно удалить cell расположенную в центре (средство – текущую cell ), не касаясь ее.

Только нажав кнопку «Корзина» и подтвердите удаление. Но теперь он удаляет только первую cell s.

 - (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { if (buttonIndex == actionSheet.destructiveButtonIndex) { initialPinchPoint = ???????? self.tappedCellPath = [self.collectionView indexPathForItemAtPoint:initialPinchPoint]; Technique *technique = [arrayOfTechnique objectAtIndex:self.tappedCellPath.row]; [self deleteData:[NSString stringWithFormat:@"DELETE FROM TECHNIQUES WHERE TECHNIQUENAME IS '%s'",[technique.techniquename UTF8String]]]; [arrayOfTechnique removeObjectAtIndex:self.tappedCellPath.row]; //[arrayOfTechnique removeObjectAtIndex:[custom_layout ]]; [self removeImage:technique.techniquename]; [self.collectionView performBatchUpdates:^{ [self.collectionView deleteItemsAtIndexPaths:[NSArrayarrayWithObject:self.tappedCellPath]]; } completion:nil]; [self checkArrayCount]; } } 

Как и вы, indexPathForItemAtPoint – это хороший способ найти путь индекса интересующего вас элемента. Если ваш вопрос: как узнать координаты этой точки? Затем вы должны попробовать (используя то же имя, которое вы дали в своем фрагменте кода):

 initialPinchPoint = CGPointMake(self.collectionView.center.x + self.collectionView.contentOffset.x, self.collectionView.center.y + self.collectionView.contentOffset.y); 

Это будет лучший код, потому что он чище и легче читать, все вычисления смещения содержимого излишни:

  NSIndexPath *centerCellIndexPath = [self.collectionView indexPathForItemAtPoint: [self.view convertPoint:[self.view center] toView:self.collectionView]]; 

Это также будет правильным представлением того, что вы на самом деле пытаетесь сделать:
1. Принимая центральную точку зрения вашего viewcontroller – aka визуальная точка центра
2. преобразуйте его в координатное пространство интересующего вас представления – это вид коллекции
3. Получить индексный путь, который существует в указанном месте.

Swift:

 extension UICollectionView { var centerPoint : CGPoint { get { return CGPoint(x: self.center.x + self.contentOffset.x, y: self.center.y + self.contentOffset.y); } } var centerCellIndexPath: NSIndexPath? { if let centerIndexPath: NSIndexPath = self.indexPathForItemAtPoint(self.centerPoint) { return centerIndexPath } return nil } } 

Применение :

 if let centerCellIndexPath: NSIndexPath = collectionView.centerCellIndexPath { print(centerCellIndexPath) } 

Swift 3:

 extension UICollectionView { var centerPoint : CGPoint { get { return CGPoint(x: self.center.x + self.contentOffset.x, y: self.center.y + self.contentOffset.y); } } var centerCellIndexPath: IndexPath? { if let centerIndexPath = self.indexPathForItem(at: self.centerPoint) { return centerIndexPath } return nil } } 

Спасибо, миланток!

У меня было несколько видимых ячеек UICollectionView и для размещения ячейки в центре представления коллекции. Что-то похожее на Adobe Content Viewer. Если кто-то борется с похожим сценарием:

 #pragma mark - UIScrollViewDelegate methods - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ CGPoint centerPoint = CGPointMake(self.pageContentCollectionView.center.x + self.pageContentCollectionView.contentOffset.x, self.pageContentCollectionView.center.y + self.pageContentCollectionView.contentOffset.y); NSIndexPath *centerCellIndexPath = [self.pageContentCollectionView indexPathForItemAtPoint:centerPoint]; [self.pageContentCollectionView scrollToItemAtIndexPath:centerCellIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES]; } 

Вот что я сделал в Swift 3

 private func findCenterIndex() { let center = self.view.convert(self.collectionView.center, to: self.collectionView) let index = collectionView!.indexPathForItem(at: center) print(index ?? "index not found") } 

Я сделал как для горизонтального UICollectionView. Я использую Swift 2.x.

 private func findCenterIndex() { let collectionOrigin = collectionView!.bounds.origin let collectionWidth = collectionView!.bounds.width var centerPoint: CGPoint! var newX: CGFloat! if collectionOrigin.x > 0 { newX = collectionOrigin.x + collectionWidth / 2 centerPoint = CGPoint(x: newX, y: collectionOrigin.y) } else { newX = collectionWidth / 2 centerPoint = CGPoint(x: newX, y: collectionOrigin.y) } let index = collectionView!.indexPathForItemAtPoint(centerPoint) print(index) } override func scrollViewDidEndDecelerating(scrollView: UIScrollView) { findCenterIndex() } 

UICollectionView имеет метод - (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point .
Этот метод возвращает путь указателя элемента в указанной точке. Вы можете вычислить точку, представляющую центр UICollectionView а затем использовать этот CGPoint и этот метод для извлечения указательного пути элемента, который вы хотите удалить.

  • UICollectionView с проблемами размера UIWebView
  • UICollectionView scrollToItemAtIndexPath: и получить свежую позицию ячейки
  • Как я могу оживить размер UICollectionViewCell на прокрутке, чтобы средний был самым большим?
  • UICollectionViewCell становится скрытым = ДА
  • Определение UICollectionViewCell с помощью наконечника
  • ios - горизонтальная прокрутка коллекции с изображениями
  • Установка индикатора активности в CollectionViewCell
  • Загрузите видео на UICollectionViewCell с фоновым потоком, чтобы создать бесшовную прокрутку
  • Изменение размера UICollectionViewCell на разных ориентациях устройства
  • UICollectionView накапливает анимацию по различным пакетным обновлениям
  • Сделать UICollectionViewCell в центре UICollectionView
  • Давайте будем гением компьютера.