Swift - анимация вперед и назад между контроллерами представления - PullRequest
1 голос
/ 15 марта 2019

Я разрабатываю приложение для ios, используя Swift 4.0.В настоящее время у меня есть два контроллера вида, в которых у меня есть UIView изображение волн шириной 1606 и высотой 628:

Waves Picture

В первом контроллере вида волны сидятв нижней части экрана как таковой:

Initial Position

Когда я проведу вверх, у меня есть следующие данные, которые передаются через сеанс:

let waveHeight = hundred?.layer.presentation()?.position.y // Current height of waves. This is a global variable

let nextViewController = segue.destination as! Secondary // nextViewController is the segue destination

nextViewController.initialXPosition = nextXPosition // this will be the initial state of the waves in the secondary view controller. Also a global variable

Чтобы произошел плавный переход, мне нужно запустить волны во вторичном контроллере вида именно там, где он остановился в исходном контроллере вида.Продукт выглядит так:

https://giphy.com/gifs/2A4bUGE9UFUrG9RHPG

Двигаясь дальше, когда я провожу пальцем вверх, волны должны двигаться соответственно вверх (100 единиц).Для этого я использовал следующий метод:

UIView.animate(withDuration: 1, delay: 0, options: [.curveLinear], animations: {
        self.hundred.transform = CGAffineTransform(translationX: 0, y: -100)

        self.waveHeight = self.hundred?.layer.presentation()?.position.y
    }, completion: nil) 

В этот момент волны плавно перемещаются по экрану и увеличиваются на 100 единиц.

Отлично.

Теперь смахивание вниз - вот где возникают проблемы.Я просто хочу использовать тот же метод, чтобы плавно вернуться на начальный экран;сохранить текущую высоту волны, передать ее обратно через переход к контроллеру начального вида и заставить волны преобразоваться вниз на 100 единиц.

Это не работает.

По какой-то причине я не могусохранить Y-положение волн во втором контроллере вида.У меня настроены операторы печати, и независимо от того, где я нахожусь в анимации, когда я провожу пальцем вниз, консоль каждый раз возвращает одно и то же значение.Поэтому, когда я возвращаюсь к контроллеру начального вида, волны автоматически продвигаются к нижней части экрана.Это очень изменчиво.

Есть ли лучший способ передавать анимацию назад и вперед между контроллерами представления?

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Есть ли лучший способ передавать анимацию назад и вперед между контроллерами представления?

Да. Создайте собственный подкласс UIStoryboardSegue и реализуйте метод perform() для запуска анимации. Segue имеет доступ как к контроллеру представления источника, так и к контроллеру представления, так что это один объект, который может как анимировать представление контроллера источника за пределами экрана, так и анимировать представление контроллера назначения на экране. Выполнение всей анимации в одном месте означает, что вам вообще не придется «передавать анимацию назад и вперед».

0 голосов
/ 20 марта 2019

Вместо того, чтобы пытаться передавать состояние анимации назад и вперед между двумя контроллерами представления, возможно, отдельный объект, на который ссылаются оба контроллера представления, должен управлять единственным состоянием анимации.

...