Название: Не работает простая анимация через YAnimator в QML Отправлено: xintrea от Январь 24, 2018, 22:48 Делаю счетчик на экране, который должен показывать произвольное число. Для отрисовки цифр используется картинка в виде вертикальной ленты, на которой нанесены цифры 0-9. Цифры на счетчике должны отображаться с анимацией прокрутки.
Для дальнейшей доработки счетчика (нужно будет сделать специальную анимацию для перехода через 0 и 9, т.е. счетчик должен будет уметь прокрутиться от 2 до 8 как 2-1-0-9-8, а не как 2-3-4-5-6-7-8) мне нужно знать с какой предыдущей цифры и на какую целевую цифру он прокручивается. Целевая цифра хранится как свойство targetDigit. С ней проблем нет: она задается внешним кодом. Предыдущая цифра хранится как свойство previousDigit. Она запоминается в конце анимации прокрутки. Но есть проблема: как только я в конец анимации прокрутки вставляю код, который как раз и запоминает предыдущее значение: Код: previousDigit=targetDigit ... то сразу анимация перестает работать. То есть, числа не «прокручиваются», а просто устанавливаются в нужное значение. Вот весь код: Код: Image { В логе я вижу следующее: Код: Target digit new: 5 , previous: 4 Обратите внимание на длинные строки (Start animation...). Сами цифры там разные: 5 и 4, 6 и 5, 7 и 6. А вот параметры from и to для YAnimator почему-то одинаковые, несмотря на то, что from зависит от previousDigit, а to зависит от targetDigit по одной и той же формуле: Код: from: hDelta+(previousDigit*hStep); Я грешил на то, что тут как-то некорретно работает property bindings, потому что свойство previousDigit меняется внутри JavaScript: http://doc.qt.io/qt-5/qtqml-syntax-propertybinding.html#creating-property-bindings-from-javascriptv И я попробовал вместо проблемной строки написать: Код: previousDigit=Qt.binding( function() {return targetDigit; } ) Но это никакого эффекта не дало. Сейчас мне нужно сделать две вещи: - научиться запоминать previousDigit. Если текущий способ не подходит, может быть есть какой-то другой. - научиться запускать анимацию с использованием значений previousDigit и targetDigit. Как видно, текущий способ некорректно выставляет свойства from и to. Вот. Кто может подсказать как обойти эти два затыка? |