UIView Animate только оживляет, если находится в IBAction. Как мне оживить его в моей ситуации? - PullRequest
0 голосов
/ 27 апреля 2018
func pickWash() {

    bottomChange = self.mapView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -350.0)
    bottomChange.isActive = true

    UIView.animate(withDuration: 10.0, animations: {
        self.view.layoutIfNeeded()
        self.waterlessLabel.isHidden = false
        self.exteriorInterior.isHidden = false
        self.exteriorOnly.isHidden = false
        self.info.isHidden = false
        self.blackLine.isHidden = false
        self.extIntPrice.isHidden = false
        self.extPrice.isHidden = false
        self.confirmWash.isHidden = false
        self.when.isHidden = false
        self.timeChoice.isHidden = false

    }, completion: nil)

}

func tester(){
   self.pickWash()
}

В действительности, мой метод тестирования в моем коде использует iOS автозаполнения Google Place, но я не хотел заливать свой код бесполезным кодом автозаполнения. Таким образом, когда пользователь заканчивает ввод своего местоположения в автозаполнении Google, вызывается функция pickwash (), и анимация не работает. Это работало только для меня, когда у меня это было в IBAction с кнопкой. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

pickWash() находится в потоке, отличном от основного (что подтверждается в комментариях OP), и поскольку основной поток - единственный, которому разрешено работать с пользовательским интерфейсом, поведение не определено (здесь ничего не происходит). Вы должны перенести выполнение кода в основной поток, используя

func pickWash() {
    // Code here is on a non-main thread
    DispatchQueue.main.async {
        // Code here is executed on the main thread 
        bottomChange = self.mapView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -350.0)
        bottomChange.isActive = true

        UIView.animate(withDuration: 10.0, animations: {
            self.view.layoutIfNeeded()
            self.waterlessLabel.isHidden = false
            self.exteriorInterior.isHidden = false
            self.exteriorOnly.isHidden = false
            self.info.isHidden = false
            self.blackLine.isHidden = false
            self.extIntPrice.isHidden = false
            self.extPrice.isHidden = false
            self.confirmWash.isHidden = false
            self.when.isHidden = false
            self.timeChoice.isHidden = false

        }, completion: nil)
    }
}

func tester(){
   self.pickWash()
}
0 голосов
/ 28 апреля 2018

Если вы хотите анимировать ограничение, все, что вам нужно сделать, это обновить свойство константы. Вот пример кода:

@IBOutlet private weak var mapViewBottomConstraint; // If you are not using InterfaceBuilder, then hold a reference to the bottom constraint when you add it to your view.

func pickWash() -> Void {
    self.mapViewBottomConstraint.constant = -350.0; // or whatever is appropriate here.
    UIView.animate(withDuration: 1.0, animations: { [weak self] in
        self?.view.layoutIfNeeded()
        // do your stuff
    }, completion: nil)
}
0 голосов
/ 28 апреля 2018

isHidden нельзя анимировать, используйте alpha, см. Код ниже. и я заметил, что вы устанавливаете время на 10,0, а 10 так долго.

func pickWash() {

    UIView.animate(withDuration: 1.0, animations: {
        self.view.layoutIfNeeded()
        self.waterlessLabel.alpha = 1
        self.exteriorInterior.alpha = 1
        self.exteriorOnly.alpha = 1
        self.info.alpha = 1
        self.blackLine.alpha = 1
        self.extIntPrice.alpha = 1
        self.extPrice.alpha = 1
        self.confirmWash.alpha = 1
        self.when.alpha = 1
        self.timeChoice.alpha = 1

    }, completion: nil)

}

func tester(){
   self.pickWash()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...