2016-10-03 2 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
  • 주를 추가하십시오 e.G. 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! 좋은 대답. 또 다른 문제 : 다시 시작하기위한 애니메이션을 추가합니다 (예 : pause ⇒ p1). 애니메이션을 다시 시작하면 재생 시간을 다시 계산해야합니다. – Jiu

+0

그것은 쉬워야합니다. 종점 (x : 0)과 현재 위치 (x : 0)의 시작점이 있습니다. 그래서 지금까지 운동의 백분율을 (pos - start)/(end - start)로 계산하고 그것을 여러분의 지속 시간과 곱합니다. (테스트되지는 않았지만 어떻게 든이 작업은 정상적으로 작동합니다 ...) – derM

관련 문제