首页 > 解决方案 > 快速级联动画时跳过第一个 UITextView 文本动画

问题描述

我正在尝试级联动画,但第一个被部分跳过。我看过其他有同样问题的帖子,但是在应用提供的解决方案时,它并不能解决我的问题。它实际上表现得很奇怪。动画基本上只是为 7 个不同的 alpha 设置动画,UIImageView一个接一个地显示它们,同时更改 a 的文本UITextView。在第一个动画中,正确的文本只是短暂显示,然后在仍然显示正确的图像时切换到下一个。从现在开始只是在前面的文本上显示..所以动画确实像预期的那样以级联方式工作..他们只是部分地做..同样在第六个动画(更长的文本)中,一半在当前动画中显示,然后是另一个half 在第七个动画中的文本之前短暂显示。UITextView的文字?如果是这样,随着时间的推移更改显示文本的正确方法是什么?我虽然这可能与UITextView文本是 a的事实有关NSLocalizedString,但将其更改为 commonString并没有什么不同(我知道..我只是在遇到麻烦时开始尝试各种事情..)一如既往非常感谢为了您的时间和帮助。这是不光彩的代码:

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,据我所知代码应该是正确的......但是......结果是一样的......实际上更糟......显示的文本始终是最后一个显示的文本。面团打印是正确的。我将图像和文本分成不同的关键帧,但结果是一样的。如果我注释掉图像关键帧,文本甚至不会显示。我真的认为这与 textview 文本动画不可能。你成功地制作动画了吗?

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")
        }

标签: iosswiftuitextviewuiviewanimation

解决方案


推荐阅读