目に見えるアニメーションを連続させようとしています。myModel.move() を 2 回呼び出す JavaScript 関数があります。myModel を表示する GridView があり、「Behavior on x」アニメーションがあるため、動きを視覚的に確認できます。ただし、両方の動きのアニメーションは並行して実行されます (それらの間の小さな遅延は目立ちません)。
私のアイデアは、開始されたアニメーションの数と、既に終了したアニメーションの数のカウンターを追加することでした。このようなもの;
Behavior on x {
NumberAnimation {
id: animationX;
duration: 500;
onRunningChanged: {
if (animationX.running) {
console.log("Animation start");
myModel.busy = myModel.busy + 1
} else {
console.log("Animation stop");
myModel.busy = myModel.busy - 1
}
}
}
}
これは期待どおりに機能します。次に、JavaScript 関数にループを追加して、すべてのアニメーションが終了するまで待機します。
ListModel {
id: myModel
property int busy: 0
function doSomething() {
myModel.move(...)
while (myModel.busy) {}
myModel.move(...)
}
}
これが問題です。最初の move() の後、必要なすべてのアニメーションが開始されたことがわかりますが、何も表示されず、アニメーションも終了していません。ある種のデッドロックがあります。これを解決するには?