Изменение размера UICollectionViewCell при работе в интерактивном режиме - PullRequest
0 голосов
/ 09 апреля 2020

Как изменить размер ячейки (возможно, используя .transform) при ее интерактивном использовании, например, перетаскивая ячейку, чтобы изменить ее порядок?

У меня есть средство распознавания жестов, подключенное к моему виду контроллер, который обрабатывает интерактивность.

  @objc func handleLongGesture(gesture: UILongPressGestureRecognizer) {
    switch gesture.state {
    case .began:
      guard let selectedIndexPath =
        imageCollectionView.indexPathForItem(at: gesture.location(in: imageCollectionView)) else {
          break
      }
      imageCollectionView.beginInteractiveMovementForItem(at: selectedIndexPath)
    case .changed:
      imageCollectionView.updateInteractiveMovementTargetPosition(
        gesture.location(in: gesture.view!)
      )
    case .ended:
      imageCollectionView.performBatchUpdates {
        self.imageCollectionView.endInteractiveMovement()
      }
    default:
      imageCollectionView.cancelInteractiveMovement()
    }
  }

И метод делегата движения следующим образом:

  func collectionView(_ collectionView: UICollectionView,
                      moveItemAt sourceIndexPath: IndexPath,
                      to destinationIndexPath: IndexPath) {
    guard let image = selectedItems?.remove(at: sourceIndexPath.row) else {
      return
    }
    selectedItems?.insert(image, at: destinationIndexPath.row)
  }

Когда я удерживаю и включаю интерактивность для определенной ячейки c, я хочу ячейка вырастет на 25%, чтобы показать, что она удерживается и является интерактивной - могу ли я это сделать?

1 Ответ

0 голосов
/ 10 апреля 2020

Простой способ,

Если вы используете UICollectionViewDelegateFlowLayout

, добавьте соответствующие логи c

var theIp: IndexPath?


func collectionView(_ collectionView: UICollectionView, 
                      layout collectionViewLayout: UICollectionViewLayout, 
               sizeForItemAt indexPath: IndexPath) -> CGSize{
     if indexPath = theIp{
          return normalSize 
     }
     else{
          return biggerSize 
     }

}

, чтобы все заработало, просто используйте func reloadItems(at indexPaths: [IndexPath])


Для дополнительной настройки

Вы должны использовать пользовательские UICollectionViewLayout,

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]?

& override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes?


Использование drag and drop, возможно, больше подходит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...