Я делаю свои первые пользовательские анимации segue. Я хочу иметь представление списка, которое, когда я выбираю строку, вместо того, чтобы скользить со стороны, расширяется на месте из выбранной строки. Нечто подобное:Пользовательский режим размотки segue для отображения анимации
Таким образом, пользователь выбирает зеленый строку, которая вызывает новый контроллер для запуска на зеленый размер строки и расширить, чтобы заполнить экран. До сих пор эта часть работала нормально.
Проблема, с которой я столкнулся, заключается в том, чтобы развернуть сеанс, который пытается сделать обратное, свернуть весь экран обратно до исходной строки, а затем убрать. То, что происходит, это то, что он сжимается хорошо, но область экспозиции остается черной, а затем внезапно вспыхивает на месте, когда анимация завершена. Что хотел что-то вроде этого:
Но что происходит это примерно так:
код я использую для размотки-х perform
выглядит следующим образом:
class FromScheduleFocusSegue: UIStoryboardSegue {
override func perform() {
let fromView = self.source.view!
let toView = self.destination.view!
let window = UIApplication.shared.keyWindow!
let schedulesList = self.destination as! SchedulesListController
let cell = schedulesList.tableView.cellForRow(at: schedulesList.tableView.indexPathForSelectedRow!)!
var stripe = cell.bounds
stripe.size.height = 60
let targetFrame = cell.convert(stripe, to: window).insetBy(dx: 0, dy: 0)
schedulesList.tableView.selectRow(at: nil, animated: false, scrollPosition: .none)
UIView.animateWithDuration(4000.milliseconds, delay: 0.seconds, options: .curveEaseInOut, animations: {
fromView.frame = targetFrame
}) { (finished) in
self.source.dismiss(animated: false, completion: nil)
}
}
}
Итак, как мне получить представление, которое я ищу, чтобы отображаться как анимация происходит?
Для полноты, вот вперед код Segue:
class ToScheduleFocusSegue: UIStoryboardSegue {
override func perform() {
let fromView = self.source.view!
let toView = self.destination.view!
let window = UIApplication.shared.keyWindow!
let box = UIScreen.main.bounds
let schedulesList = self.source as! SchedulesListController
let cell = schedulesList.tableView.cellForRow(at: schedulesList.tableView.indexPathForSelectedRow!)!
toView.frame = cell.convert(cell.bounds, to: window).insetBy(dx: 0, dy: 0)
window.insertSubview(toView, aboveSubview: fromView)
UIView.animateWithDuration(4000.milliseconds, delay: 0.seconds, options: .curveEaseInOut, animations: {
toView.frame = box
}) { (finished) in
self.source.present(self.destination, animated: false, completion: nil)
}
}
}
(Это в XCode8, ориентированное на iOS10 с помощью Swift3)
Вы должны использовать пользовательские переходы вместо этого./UIPпредставлениеКонтроллер и семья. – Andy
Если вы можете показать мне пример, чтобы заставить меня двигаться в правильном направлении, что делает то, что я хочу визуально, щедрость ваша. –
Я бы посмотрел больше в UICollectionView. Например, см. Раздел «Анимация макета коллекции для общих переходов» здесь https://www.objc.io/issues/12-animations/collectionview-animations/ –