Кнопка переходит в положение, когда приложение переходит в фоновый режим - PullRequest
0 голосов
/ 01 июля 2018

У меня есть маленькая кнопка, чтобы показать и скрыть элемент пользовательского интерфейса. Когда я нажимаю кнопку «Домой», чтобы выйти из приложения, а затем возвращаюсь к нему, кнопка переходит в исходное положение, а не в новое положение, в котором она была анимирована.

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

This before the button is pressed

This is after

If I send the app to the background it comes back like this.

@IBAction func hideChartTapped(_ sender: Any) {
    let delay = 0.3
    if chart.isHidden {
        self.chart.isHidden = false
        UIView.animate(withDuration: delay, animations: {
            self.hideChart.center.y = (self.hideChart.center.y - self.chart.bounds.height)
            self.chart.center.y = (self.chart.center.y - self.chart.bounds.height)
        }, completion: nil)
    } else {
        UIView.animate(withDuration: delay, animations: {
            self.hideChart.center.y = (self.hideChart.center.y + self.chart.bounds.height)
            self.chart.center.y = (self.chart.center.y + self.chart.bounds.height)
            self.hideChart.setNeedsDisplay()
        }, completion: nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: {
            self.chart.isHidden = true
        })
    }
}

Это код, который я использую, чтобы скрыть и показать график и переместить кнопку. Положение по умолчанию для кнопки и диаграммы устанавливается в main.Storyboard.

1 Ответ

0 голосов
/ 01 июля 2018

Я понял это. Я также не обновлял ограничения. Я все еще оживляю движение центра, но после анимации я сбрасываю ограничения следующим образом:

@IBAction func hideChartTapped(_ sender: Any) {
    let delay = 0.3
    if chart.isHidden {
        self.chart.isHidden = false
        UIView.animateKeyframes(withDuration: delay, delay: 0, options: [], animations: {
            self.hideChart.center.y = (self.hideChart.center.y - self.chart.bounds.height)
            self.chart.center.y = (self.chart.center.y - self.chart.bounds.height)
        }, completion: nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: {
            self.hideChartBottomConstraint.constant = 0
            self.hideChart.layoutIfNeeded()
        })
    } else {
        UIView.animateKeyframes(withDuration: delay, delay: 0, options: [], animations: {
            self.hideChart.center.y = (self.hideChart.center.y + self.chart.bounds.height)
            self.chart.center.y = (self.chart.center.y + self.chart.bounds.height)
        }, completion: nil)
        DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: {
            self.hideChartBottomConstraint.constant = self.chart.bounds.height
            self.hideChart.layoutIfNeeded()
            self.chart.isHidden = true
        })
    }
}
...