Доброе утро, и спасибо за чтение!В моем проекте я использую UICollectionViewController, и я реализовал анимацию, которая расширяет его ячейки на ощупь.Если вы не хотите получить лучшее представление об этом, просто загляните в раздел «Сегодня» в App Store.Мой CVC встроен в контроллер навигации, потому что я использую элемент навигации в моем представлении.При расширении я отклоняю его, и это, кажется, заставляет мой взгляд обрезать безопасную область, потому что ячейки не полностью раскрыты на iPhone X. Это первая проблема, но главная заключается в том, что контроллер навигации становится нулевым, когда яне хотите вернуться к элементу навигации (при свертывании).
Вот функция, которая вызывается при выборе ячейки:
func animateCell(_ cell: BookCell, style: CellAnimationStyle) {
//...
let dampingRatio: CGFloat = 0.8
let initialVelocity: CGVector = CGVector.zero
let springParameters: UISpringTimingParameters = UISpringTimingParameters(dampingRatio: dampingRatio, initialVelocity: initialVelocity)
let animator = UIViewPropertyAnimator(duration: 0.8, timingParameters: springParameters)
self.view.isUserInteractionEnabled = false
self.CollectionView.isScrollEnabled = (style == .Collapse)
let NVC = self.navigationController!
if style == .Expand {
self.expandedCell = cell
NVC.setNavigationBarHidden(true, animated: true)
} else {
DispatchQueue.main.async {
self.expandedCell = nil
NVC.setNavigationBarHidden(false, animated: true)
}
}
animator.addAnimations {
if style == .Expand {
self.statusBarHidden = true
self.CollectionView.bringSubviewToFront(cell)
cell.expand(collectionView: self.CollectionView)
} else {
self.statusBarHidden = false
cell.collapse(collectionView: self.CollectionView)
}
}
animator.addCompletion() { _ in
DispatchQueue.main.async {
self.view.isUserInteractionEnabled = true
self.CollectionView.isScrollEnabled = (style == .Collapse)
}
if style == .Expand {
cell.isExpanded = true
} else {
cell.isExpanded = false
}
}
animator.startAnimation()
self.setNeedsStatusBarAppearanceUpdate()
cell.layoutIfNeeded()
}
Затем, когда ячейка расширяется, онаполучает кнопку закрытия, связанную с этим IBAction:
@IBAction func didTouchCollapse(_ sender: UIButton) {
guard let nc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BookNC") as? UINavigationController else { return }
guard let delegate = nc.children.first as? ChaptersCollectionViewDelegate else { return }
delegate.collapseCell(self, style: .Collapse)
}
Метод делегата просто вызывает animateCell () с ячейкой и стилем .Collapse в качестве параметров.Большое спасибо за вашу помощь!