Я пытаюсь каскадировать анимацию, но первое частично пропускается. Я видел другие посты с такой же проблемой, но при применении предложенных решений это не решает мою проблему. Это на самом деле ведет себя странно. Анимации в основном просто анимируют альфа из 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")
}