Я пытаюсь оживить UIView, сжимаясь и перемещаясь в другую центральную точку. Он запускается, когда пользователь касается определенного UICollectionViewCell, создается новый UIView, центрированный в ячейке, и начинает расширяться, пока не заполнит весь экран. Это отлично работает. Я сохраняю исходную центральную точку ячейки в новом UIView (пользовательский класс со свойством originCenter).
let expandingCellView = SlideOverView(frame: cell.bounds)
expandingCellView.center = collectionView.convert(cell.center, to: self)
expandingCellView.textLabel.text = cell.textLabel.text
expandingCellView.originWidth = cell.bounds.width
expandingCellView.originHeight = cell.bounds.height
expandingCellView.originCenter = self.convert(expandingCellView.center, to: self)
expandingCellView.originView = self
self.addSubview(expandingCellView)
expandingCellView.widthConstraint.constant = self.frame.width
expandingCellView.heightConstraint.constant = self.frame.height
UIView.animate(withDuration: 0.3, animations: {
expandingCellView.center = self.center
expandingCellView.layoutIfNeeded()
})
Этот код работает отлично. Теперь я добавил кнопку в это расширенное представление, которое выполняет следующий код:
widthConstraint.constant = originWidth
heightConstraint.constant = originHeight
print(self.convert(self.originCenter, to: nil))
UIView.animate(withDuration: 0.5, animations: {
self.center = self.convert(self.originCenter, to: nil)
self.layoutIfNeeded()
}, completion: { (done) in
// self.removeFromSuperview()
})
Сжатие представления до его исходного размера работает нормально. Единственное, что не работает - это центрирование. Я беру исходную центральную точку ячейки и преобразовываю ее в эту систему координат видов. Это дает координаты, которые я считаю правильными. Однако все виды просто перемещаются в верхний левый угол экрана.
Ниже приведена ссылка на экран записи. Первый UIView печатает свою новую центральную точку как (208.75, 411.75), а второй открытый UIView I печатает свой центр как (567.25, 411.75). Эти значения кажутся мне правильными, однако они не перемещаются к этой точке, как вы можете видеть на видео. В любом случае, как это можно исправить?
Даже при установке нового центра, например, CGPoint(x: 500, y: 500)
, представление по-прежнему перемещается в x = 149,5 и y = 149,5
Видео: https://streamable.com/pxemc