Редактирование TextField переместить анимированный UIView в исходное положение Swift - PullRequest
0 голосов
/ 01 сентября 2018

При пролистывании вверх я анимировал вид снизу экрана, используя приведенный ниже код

UIView.animate(withDuration: 0.5, delay: 0.0, options: [], animations)

вместе с

self.view.layoutIfNeeded()

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

Может кто-нибудь, пожалуйста, помогите мне исправить это, я попробовал много вариантов.

@objc func handleSwipe(_ sender : UISwipeGestureRecognizer){
    UIView.animate(withDuration: 0.5, delay: 0.0, options: [], animations: {
        if sender.direction == .up{
            switch self.currentIndex {
            case 0:
                self.assetsView.frame = CGRect(x: self.assetsView.frame.origin.x, y: self.scrollUpY , width: self.assetsView.frame.size.width, height: self.assetsView.frame.size.height)
                self.liabilitiesView.frame = CGRect(x: self.liabilitiesView.frame.origin.x, y: self.scrollDownY , width: self.liabilitiesView.frame.size.width, height: self.liabilitiesView.frame.size.height)
                break
            case 1:
                self.assetsView.frame = CGRect(x: self.assetsView.frame.origin.x, y: self.originalTopY , width: self.assetsView.frame.size.width, height: self.assetsView.frame.size.height)
                self.liabilitiesView.frame = CGRect(x: self.liabilitiesView.frame.origin.x, y: self.scrollUpY , width: self.liabilitiesView.frame.size.width, height: self.liabilitiesView.frame.size.height)
                self.savingsView.frame = CGRect(x: self.savingsView.frame.origin.x, y: self.scrollDownY , width: self.savingsView.frame.size.width, height: self.savingsView.frame.size.height)
                break
            case 2:
                self.liabilitiesView.frame = CGRect(x: self.liabilitiesView.frame.origin.x, y: self.originalTopY , width: self.liabilitiesView.frame.size.width, height: self.liabilitiesView.frame.size.height)
                self.savingsView.frame = CGRect(x: self.savingsView.frame.origin.x, y: self.scrollUpY , width: self.savingsView.frame.size.width, height: self.savingsView.frame.size.height)
                break;
            case 3:
                break;
            default:
                QL1("Success")
            }
        }else if sender.direction == .down{
            switch self.currentIndex {
            case 0:
                self.assetsView.frame = CGRect(x: self.assetsView.frame.origin.x, y: self.scrollDownY , width: self.assetsView.frame.size.width, height: self.assetsView.frame.size.height)
                self.liabilitiesView.frame = CGRect(x: self.liabilitiesView.frame.origin.x, y: self.originalDownY , width: self.liabilitiesView.frame.size.width, height: self.liabilitiesView.frame.size.height)
                break
            case 1:
                self.assetsView.frame = CGRect(x: self.assetsView.frame.origin.x, y: self.scrollUpY , width: self.assetsView.frame.size.width, height: self.assetsView.frame.size.height)
                self.liabilitiesView.frame = CGRect(x: self.liabilitiesView.frame.origin.x, y: self.scrollDownY , width: self.liabilitiesView.frame.size.width, height: self.liabilitiesView.frame.size.height)
                self.savingsView.frame = CGRect(x: self.savingsView.frame.origin.x, y: self.originalDownY , width: self.savingsView.frame.size.width, height: self.savingsView.frame.size.height)
                break
            case 2:
                self.assetsView.frame = CGRect(x: self.assetsView.frame.origin.x, y: self.originalTopY , width: self.assetsView.frame.size.width, height: self.assetsView.frame.size.height)
                self.liabilitiesView.frame = CGRect(x: self.liabilitiesView.frame.origin.x, y: self.scrollUpY , width: self.liabilitiesView.frame.size.width, height: self.liabilitiesView.frame.size.height)
                self.savingsView.frame = CGRect(x: self.savingsView.frame.origin.x, y: self.scrollDownY , width: self.savingsView.frame.size.width, height: self.savingsView.frame.size.height)
                break;
            case 3:
                break;
            default:
                QL1("Success")
            }
        }
        self.view.layoutIfNeeded()
    }, completion: { (finished: Bool) in
        self.updateScreen(sender)
    })
}

Заранее спасибо.

Layout Constraints

1 Ответ

0 голосов
/ 01 сентября 2018

Вы можете попробовать CGAffineTransform. Для перевода

UIView.animate(withDuration: 0.5, delay: 0.0, options: [], animations: {
    yourView.transform = CGAffineTransform(translationX: xOffset, y: yOffset)
}

И для возврата обратно в исходное положение;

UIView.animate(withDuration: 0.5, delay: 0.0, options: [], animations: {
        yourView.transform = CGAffineTransform.identity
    }
...