Первая анимация текста UITextView пропускается при быстрой смене каскадной анимации - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь каскадировать анимацию, но первое частично пропускается. Я видел другие посты с такой же проблемой, но при применении предложенных решений это не решает мою проблему. Это на самом деле ведет себя странно. Анимации в основном просто анимируют альфа из 7 различных UIImageView, показывая их одну за другой, изменяя текст UITextView. В первой анимации правильный текст отображается ненадолго, а затем меняется на следующий, пока отображается правильное изображение. Отныне просто отображается текст впереди ... Так что анимации работают в каскаде, как и ожидалось ... они делают это частично ... Кроме того, в шестой анимации (более длинный текст) половина ее отображается во время текущей анимации, затем другаяполовина отображается на короткое время перед текстом в седьмой анимации. Есть ли проблема с анимацией текста UITextView? Если да, то как правильно изменить отображаемый текст с течением времени? Я думал, что это может быть связано с тем фактом, что текст UITextView является NSLocalizedString, но изменение его на общее String не имело значения (я знаю .. Я просто начинаю пробовать все, когдав беде ..) Как всегда большое спасибо за ваше время и помощь. Это бесславный код:

UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
            print("1 hintScheduler")
            self.hintTextView.text = NSLocalizedString("hintScheduler", comment: "") // this text gets displayed just for an instant and then skipped
            self.hintImage1.alpha = 1
            self.hintTextView.alpha = 1


                }, completion: { (true)  in
            UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
                print("2 hintShop")
                self.hintTextView.text = NSLocalizedString("hintShop", comment: "")
                self.hintImage1.alpha = 0
                self.hintImage2.alpha = 1


            }, completion: { (true) in
                UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
                    print("3 hintOrders")
                    self.hintTextView.text = NSLocalizedString("hintOrders", comment: "")
                    self.hintImage2.alpha = 0
                    self.hintImage3.alpha = 1

                }, completion: { (true) in
                    UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
                        print("4 hintBookings")
                        self.hintTextView.text = NSLocalizedString("hintBookings", comment: "")
                        self.hintImage3.alpha = 0
                        self.hintImage4.alpha = 1

                    }, completion: { (true) in
                        UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
                            print("5 hintRoutes")
                            self.hintTextView.text = NSLocalizedString("hintRoutes", comment: "")
                            self.hintImage4.alpha = 0
                            self.hintImage5.alpha = 1

                        }, completion: { (true) in
                            UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
                                print("6 hintSpeedo")
                                self.hintTextView.text = NSLocalizedString("hintSpeedo", comment: "") // here text gets truncated until the next aniimation starts
                                self.hintImage5.alpha = 0
                                self.hintImage6.alpha = 1

                            }, completion: { (true) in
                                UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
                                    print("7 hintSettings")
                                    self.hintTextView.text = "settings"//NSLocalizedString("hintSettings", comment: "")
                                    self.hintImage6.alpha = 0
                                    self.hintImage7.alpha = 1

                                }, completion: { (true) in
                                    UIView.animate(withDuration: 0.3, delay: 3, options: .curveLinear, animations: {
                                        print("closing")
                                        self.hintImage7.alpha = 0
                                        self.hintTextView.alpha = 0
                                    }, completion: { (true) in
                                        print("finished")
                                    })
                                })
                            })
                        })
                    })
                })
            })
        })

ОБНОВЛЕНИЕ: рабочая (тесто не очень синхронизированная с изображением / текстом) анимация будет заключаться в том, чтобы вкладывать каждое изображение пассажа -> текст -> изображение2 -> текст2 ... но этоэто бессмыслица, так как для моей 8-шаговой анимации это означает вложение 15 уровней ... у меня это работает ... но я бы, очевидно, этого не допустил .. Так что я пытаюсь animateKeyframes, и насколько я понимаю, код должен бытьправильно .. но .. результат точно такой же .. на самом деле хуже .. отображаемый текст всегда отображается последним .. отпечатки теста верны. Я разделил изображения и текст на разные ключевые кадры, но результат тот же ... если я закомментирую ключевые кадры изображений, текст даже не отображается ... Я действительно думаю, что это связано с невозможностью анимации текста в текстовом представлении. Вы успешно оживили это?

let duration = 8.0;
        let relativeDuration = 1.0/8;

        UIView.animateKeyframes(withDuration: duration, delay: 0, options: .overrideInheritedOptions, animations: {


//            UIView.addKeyframe(withRelativeStartTime: 0 * relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("1 hintScheduler")
//                self.hintImage1.alpha = 1
//                self.hintTextView.alpha = 1
//            })
            UIView.addKeyframe(withRelativeStartTime: 0 * relativeDuration, relativeDuration: relativeDuration, animations: {
                print("1 hintScheduler")
                self.hintTextView.text = NSLocalizedString("hintScheduler", comment: "")
            })


//            UIView.addKeyframe(withRelativeStartTime: relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("2 hintShop")
//                self.hintImage1.alpha = 0
//                self.hintImage2.alpha = 1
//            })
            UIView.addKeyframe(withRelativeStartTime: relativeDuration, relativeDuration: relativeDuration, animations: {
                print("2 hintShop")
                self.hintTextView.text = NSLocalizedString("hintShop", comment: "")
            })


//            UIView.addKeyframe(withRelativeStartTime: 2 * relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("3 hintOrders")
//                self.hintImage2.alpha = 0
//                self.hintImage3.alpha = 1
//            })
            UIView.addKeyframe(withRelativeStartTime: 2 * relativeDuration, relativeDuration: relativeDuration, animations: {
                print("3 hintOrders")
                self.hintTextView.text = NSLocalizedString("hintOrders", comment: "")
            })


//            UIView.addKeyframe(withRelativeStartTime: 3 * relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("4 hintBookings")
//                self.hintImage3.alpha = 0
//                self.hintImage4.alpha = 1
//            })
            UIView.addKeyframe(withRelativeStartTime: 3 * relativeDuration, relativeDuration: relativeDuration, animations: {
                print("4 hintBookings")
                self.hintTextView.text = NSLocalizedString("hintBookings", comment: "")
            })


//            UIView.addKeyframe(withRelativeStartTime: 4 * relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("5 hintRoutes")
//                self.hintImage4.alpha = 0
//                self.hintImage5.alpha = 1
//            })
            UIView.addKeyframe(withRelativeStartTime: 4 * relativeDuration, relativeDuration: relativeDuration, animations: {
                print("5 hintRoutes")
                self.hintTextView.text = NSLocalizedString("hintRoutes", comment: "")
            })


//            UIView.addKeyframe(withRelativeStartTime: 5 * relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("6 hintSpeedo")
//                self.hintImage5.alpha = 0
//                self.hintImage6.alpha = 1
//            })
            UIView.addKeyframe(withRelativeStartTime: 5 * relativeDuration, relativeDuration: relativeDuration, animations: {
                print("6 hintSpeedo")
                self.hintTextView.text = NSLocalizedString("hintSpeedo", comment: "")
            })

//
//            UIView.addKeyframe(withRelativeStartTime: 6 * relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("7 hintSettings")
//                self.hintImage6.alpha = 0
//                self.hintImage7.alpha = 1
//            })
            UIView.addKeyframe(withRelativeStartTime: 6 * relativeDuration, relativeDuration: relativeDuration, animations: {
                print("7 hintSettings")
                self.hintTextView.text = NSLocalizedString("hintSettings", comment: "")
            })


//            UIView.addKeyframe(withRelativeStartTime: 7 * relativeDuration, relativeDuration: relativeDuration, animations: {
//                print("closing")
//                self.hintImage7.alpha = 0
//                self.hintTextView.alpha = 0
//            })
        }) { (true) in
            print("k animation finished")
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...