FrameAnimation QML Type
애니메이션 프레임 업데이트 시마다 핸들러를 호출합니다. 더 보기...
| Import Statement: | import QtQuick |
| Since: | Qt 6.4 |
속성
- currentFrame : int
- elapsedTime : real
- frameTime : real
- paused : bool
- running : bool
- smoothFrameTime : real
신호
방법
상세 설명
FrameAnimation을 사용하면 애니메이션이 진행되고 애니메이션 프레임이 렌더링될 때마다 특정 동작을 트리거할 수 있습니다. 스레드 기반 및 기본 렌더 루프에 대한 자세한 내용은 씬 그래프 ( Scene Graph ) 문서를 참조하십시오.
일반적인 애니메이션의 경우, 애니메이션을 선언적인 방식으로 기술할 수 있는 ` NumberAnimation ` 및 기타 ` Animation ` 요소를 사용하는 것이 좋습니다.
반면, FrameAnimation은 사용자 정의 명령형 애니메이션이나 다음과 같은 사용 사례에 사용해야 합니다.
- 매 프레임 업데이트 시 코드를 실행해야 할 때. 또는 예를 들어, 프로그레시브 렌더링을 사용하여 격 프레임마다 코드를 실행해야 할 때 등입니다.
- 애니메이션 진행 중에 속도나 목표값이 변경되는 경우, 일반적인 QML 애니메이션만으로는 한계가 있을 수 있습니다.
- FPS 카운터와 같이 더 정확한 프레임 업데이트 시간이 필요한 경우.
interval 시간을 설정할 수 있는 Timer 과 달리, FrameAnimation은 항상 애니메이션 업데이트와 동기화되어 실행됩니다. 아래와 같이 사용자 정의 애니메이션에 짧은 간격으로 Timer 을 사용해 온 경우, 더 부드러운 애니메이션을 위해 대신 FrameAnimation으로 전환하는 것을 고려해 보시기 바랍니다.
// BAD
Timer {
interval: 16
repeat: true
running: true
onTriggered: {
// Animate something
}
}
// GOOD
FrameAnimation {
running: true
onTriggered: {
// Animate something
}
}속성 설명서
currentFrame : int [read-only]
이 속성은 시작 이후의 프레임 업데이트 횟수를 저장합니다. 프레임 애니메이션이 다시 시작되면 currentFrame은 0 에서 시작됩니다.
다음 예제는 프레임 업데이트에 반응하는 방법을 보여줍니다.
FrameAnimation {
running: true
onTriggered: {
// Run code on every frame update.
}
}이 속성은 n번째 프레임마다만 렌더링하는 데에도 사용할 수 있습니다. UI에 두 개의 리소스 소모가 큰 요소가 포함되어 있고, 전체적으로 부드러운 60fps 프레임 속도를 달성하기 위해 이 두 요소를 30fps로 렌더링하기로 결정한 경우를 생각해 보겠습니다. 첫 번째 요소는 짝수 프레임마다, 두 번째 요소는 홀수 프레임마다 렌더링합니다:
FrameAnimation {
running: true
onTriggered: {
if (currentFrame % 2 == 0)
updateUIElement1();
else
updateUIElement2();
}
}기본적으로 ` frame `의 값은 0입니다.
elapsedTime : real [read-only]
이 속성은 이전 시작 시점부터 경과한 시간(초 단위)을 저장합니다.
기본적으로 ` elapsedTime `는 0입니다.
frameTime : real [read-only]
이 속성은 이전 프레임 업데이트 이후 경과한 시간(초 단위)을 저장합니다.
다음 예제는 frameTime을 사용하여 화면 재생 빈도와 발생할 수 있는 fps 저하 상황에 맞춰 속도를 조절하며 아이템을 애니메이션 처리하는 방법을 보여줍니다.
Rectangle {
id: rect
property real speed: 90
width: 100
height: 100
color: "red"
anchors.centerIn: parent
}
FrameAnimation {
id: frameAnimation
running: true
onTriggered: {
// Rotate the item speed-degrees / second.
rect.rotation += rect.speed * frameTime
}
}기본적으로 ` frameTime `의 값은 0입니다.
paused : bool
true로 설정하면 프레임 애니메이션을 일시 중지하고, 그렇지 않으면 재개합니다.
paused 기본값은 false입니다.
running : bool
true로 설정하면 프레임 애니메이션을 시작하고, 그렇지 않으면 중지합니다.
running 기본값은 false입니다.
stop(), start(), restart()도 참조하십시오 .
smoothFrameTime : real [read-only]
이 속성은 이전 프레임 업데이트 이후의 평활화된 시간(초 단위)을 저장합니다.
다음 예제는 smoothFrameTime을 사용하여 평균 fps를 표시하는 방법을 보여줍니다.
Text {
text: "fps: " + frameAnimation.fps.toFixed(0)
}
FrameAnimation {
id: frameAnimation
property real fps: smoothFrameTime > 0 ? (1.0 / smoothFrameTime) : 0
running: true
}기본적으로 ` smoothFrameTime `의 값은 0입니다.
Signal 문서
triggered()
FrameAnimation 가 새로운 프레임으로 넘어갔을 때 이 신호가 발생합니다.
참고: 해당 핸들러는 onTriggered 입니다.
메서드 문서
void pause()
프레임 애니메이션을 일시 중지합니다.
프레임 애니메이션이 이미 일시 중지되어 있거나 ` running`가 아닌 경우, 이 메서드를 호출해도 아무런 효과가 없습니다. ` pause()`를 호출한 후에는 ` paused ` 속성이 `true`가 됩니다.
void reset()
프레임 애니메이션 속성을 초기화합니다.
이 메서드를 호출하면 frame 및 elapsedTime 속성이 초기값(0)으로 재설정됩니다. 이 메서드는 running 또는 paused 속성에는 영향을 미치지 않으며, 해당 속성이 true이거나 false인 상태에서도 호출할 수 있습니다.
reset() 와 restart() 를 호출하는 것의 차이점은, reset() 는 항상 속성을 초기화하는 반면, restart() 는 다음 프레임 업데이트 시에만 속성을 초기화한다는 점입니다. 예를 들어, restart() 가 바로 pause() 로 이어지는 경우에는 프레임 업데이트가 발생하지 않으므로 속성이 초기화되지 않습니다.
void restart()
프레임 애니메이션을 다시 시작합니다.
FrameAnimation 이 실행 중이 아닌 경우 시작되며, 실행 중인 경우 중지된 후 초기 상태로 재설정된 뒤 다시 시작됩니다. restart() 를 호출한 후에는 running 속성이 true가 됩니다.
void resume()
일시 중지된 프레임 애니메이션을 재개합니다.
프레임 애니메이션이 일시 정지되지 않았거나 ` running` 상태가 아닌 경우, 이 메서드를 호출해도 아무런 효과가 없습니다. ` resume()` 호출 후에는 ` paused ` 속성이 `false`가 됩니다.
void start()
프레임 애니메이션을 시작합니다.
프레임 애니메이션이 이미 실행 중인 경우, 이 메서드를 호출해도 아무런 효과가 없습니다. ` start()`를 호출한 후에는 ` running ` 속성이 true가 됩니다.
void stop()
프레임 애니메이션을 중지합니다.
프레임 애니메이션이 실행 중이 아닌 경우, 이 메서드를 호출해도 아무런 효과가 없습니다. ` stop()`를 호출한 후에는 ` running ` 및 ` paused ` 속성이 모두 `false`가 됩니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.