ViewWillTransitonToSize вращение Анимация
Я пытаюсь заменить анимацию вращения устройства iOS по умолчанию в моем UIcollectionView. Я использую viewWillTransitionToSize и targetTransform() для transitionCoordinator, чтобы предотвратить поворот представления по умолчанию, а затем использую преобразование для поворота каждого visibleCell в правильную ориентацию. Работает нормально, кроме:
- Клетки на непосредственных внешних границах видимого прямоугольника не вращаются.
- Мои журналы показывают, что массив collectionView.visibleCells() дает мне то, что он должен: видимые ячейки, но я обнаружил, что если я позволю представлению вращаться с анимацией по умолчанию, массив visibleCells дает мне видимые ячейки плюс ячейки в непосредственной близости.
- Я пытался получить доступ к этим "соседским" ячейкам, чтобы я мог повернуть их, но все мои попытки провалились с треском.
Вот моя реализация 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 ниже.
С целью повторного использования клетки, 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
}