2016-10-03 15 views
1

サンプルコード:ここでQMLトランジションアニメーションを停止するにはどうすればいいですか?

Button{ 
    text: "stop" 
    onClicked: p1p2Aniamtion.stop(); 
} 
Rectangle { 
    id: rect 
    states: [ 
     State { 
      name: "p1" 
      PropertyChanges {target: rect; x: 0; y: 0} 
     }, 
     State { 
      name: "p2" 
      PropertyChanges {target: rect; x: 500; y: 0} 
     } 
    ] 
    transitions: [ 
     Transition { 
      from: "p1"; to: "p2"; reversible: true 
      NumberAnimation{ property: "x"; duration: 5000} 
     } 
    ] 
} 

私は四角形を持って、それがボタンをクリックすると、私は遷移力のアニメーションを停止したい 、p2をポイントツーポイントp1から移動します。

私はNumberAnimationを停止しようとしましたが、NumberAnimationTransitionと結びついていますので、とにかくアニメーションを制御しますか?

答えて

0

あなたは、それを強制的に終了位置に移動し、しようとする場合:

onClicked: { 
     var s = rect.state 
     rect.state = '' 
     rect.state = s 
    } 

あなたが元の位置に試しにそれをリセットする場合:あなたはそれをしたい場合は

onClicked: { 
     rect.state = '' 
    } 

試している場所にとどまる:

  • プロパティを追加するeG tempX:x
  • 状態を追加します。 propertyChange {target:rect;}で一時停止します。 X:tempX}
  • onXChanged:tempX = X

スイッチ状態への '一時停止' のおかげ

Button{ 
    y: 400 
    text: "stop" 
    onClicked: { 
     var s = rect.state 
     rect.state = 'pause' 
     //rect.state = s 
    } 
} 

Button{ 
    y: 400 
    x: 100 
    text: "run" 
    onClicked: rect.state = (rect.state === 'p1' ? 'p2' : 'p1'); 
} 

Rectangle { 
    id: rect 
    width: 80 
    height: 80 
    property int tempX: x 
    onXChanged: tempX = x 

    states: [ 
     State { 
      name: "p1" 
      PropertyChanges {target: rect; x: 0; y: 0} 
     }, 
     State { 
      name: "p2" 
      PropertyChanges {target: rect; x: 500; y: 0} 
     }, 
     State { 
      name: 'pause' 
      PropertyChanges { target: rect; x: tempX } 
     } 
    ] 
    transitions: [ 
     Transition { 
      from: "p1"; to: "p2"; reversible: true 
      NumberAnimation{ property: "x"; duration: 5000} 
     } 
    ] 
} 
+0

をonClicked!素晴らしい答え。 もう1つの問題:アニメーションを再開するためにアニメーションを追加します(例:pause⇒p1)。アニメーションを再開すると、再生時間を再計算する必要があります。 – Jiu

+0

これは簡単です。あなたは開始点(x:0)と終了点(x:500)とあなたの現在の位置を持っています。したがって、これまでの動きの割合(pos-start)/(end-start)を計算し、それをあなたの持続時間と乗算します。 (テストされていませんが、どういうわけか、これはうまくいくはずです...) – derM

関連する問題