ios - 快速级联动画时跳过第一个 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")
}
解决方案
推荐阅读
- javascript - 如何重置引导向导
- javascript - 如何使用后端和页码更新表中的内容
- html - 有没有办法让输入框具有响应宽度,即使它是 flex 的孩子?
- phpunit - PhpUnit 不使用字符串数字和抽象类识别 TypeError
- python - unhexlify 总是需要对
- jdbc - TDengine taos-JDBC 找不到合适的驱动
- c# - Cross join between arbitrary number of sets
- python - Capture detected image by YOLOv4
- ios - SwiftUI - TabView automatically changes selection when size changes
- java - getInputStream() has already been called for this request - Java