ViewWillTransitonToSize вращение Анимация

Я пытаюсь заменить анимацию вращения устройства iOS по умолчанию в моем UIcollectionView. Я использую viewWillTransitionToSize и targetTransform() для transitionCoordinator, чтобы предотвратить поворот представления по умолчанию, а затем использую преобразование для поворота каждого visibleCell в правильную ориентацию. Работает нормально, кроме:

  1. Клетки на непосредственных внешних границах видимого прямоугольника не вращаются.
  2. Мои журналы показывают, что массив collectionView.visibleCells() дает мне то, что он должен: видимые ячейки, но я обнаружил, что если я позволю представлению вращаться с анимацией по умолчанию, массив visibleCells дает мне видимые ячейки плюс ячейки в непосредственной близости.
  3. Я пытался получить доступ к этим "соседским" ячейкам, чтобы я мог повернуть их, но все мои попытки провалились с треском.

Вот моя реализация ViewWillTransitionTosize:

override func viewWillTransitionToSize( size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator){
       super.viewWillTransitionToSize(size , withTransitionCoordinator: coordinator)

      let transf : CGAffineTransform = coordinator.targetTransform()
      let invertedRotation = CGAffineTransformInvert(transf)
      let currentBounds = view.bounds
     coordinator.animateAlongsideTransition({
     _ in

     self.view.transform = CGAffineTransformConcat(self.view.transform, invertedRotation )
        self.undoRotation =  CGAffineTransformConcat(self.undoRotation, transf)
     self.view.bounds = currentBounds
}, completion: ({ finished in
         if ( finished != nil){

                 UIView.animateWithDuration(0.5,  animations: {
                 for cell  in self.collectionView!.visibleCells(){
                    cell.contentView.transform = self.undoRotation
                 }
             })}
         })
)

Здесь быстрый подарок. чтобы проиллюстрировать проблему: http://www.blessinglopes.com/Info

Любая помощь будет оценена! Спасибо!

2 ответа

Решение

Я решил проблему, реализовав отдельный поток, в котором ячейка анимирована. Вы можете проверить код в репозитории git ниже.

https://github.com/rakeshbs/RotatingCollectionView

С целью повторного использования клетки, collectionView:cellForItemAtIndexPath всегда будет вызываться при прокрутке. Так просто убедитесь, что все ваши новые появившиеся ячейки применены в правильной новой ориентации. Например добавить эту строку cell.contentView.transform = self.counterRotation в вашем collectionView:cellForItemAtIndexPath после того, как клетка снята с производства.

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell : MyCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("CellIdentifier", forIndexPath: indexPath) as MyCollectionViewCell
    cell.imageView.image = UIImage(named: "MyImg")!
    cell.contentView.transform = self.undoRotation
    return cell
}
Другие вопросы по тегам