네이티브 애니메이션, 완전한 이벤트 반응


88

Animated.spring이 끝날 때 이벤트를 트리거하는 가장 좋은 방법은 무엇입니까?

Animated.spring(this.state.pan, {
    toValue: 0
}).start()

나는 꽤 많이 검색했지만 그것을 수행하는 단일 방법을 찾지 못했습니다. addListener를 사용하여 애니메이션이 종료 값 또는 시간 초과에 도달했는지 확인할 수 있지만 둘 다 매우 간단해야하는 것에 대한 추악한 수정처럼 느껴집니다.

아는 사람 있나요?

답변:



14

애니메이션이 시작될 때 실행됩니다.

.start(console.log("Start Animation")

화살표 기능이나 기능을 사용하여에 불려가는 끝났 END 애니메이션

.start(() => {console.log("Animation DONE")})

그리고 마지막으로 이것이 함수의 맥락에서 보이는 모습입니다.

_play(){
  Animated.timing(this.state.progress, {
     toValue: 1,
     duration: 5000,
     easing: Easing.linear,
   }).start(() => {console.log("Animation DONE")});
}

도움이 되었기를 바랍니다.


12
.start(console.log("Start Animation")부작용으로 인해 애니메이션 시작시에만 "발동"됩니다. 이것은 기능적으로 console.log("Start Animation"); Animated.timing(...).start(..). 이것은 방법의 의도적 인 사용이 아닙니다. 이것을 사용하지 마십시오. start()애니메이션이 끝날 때 콜백을받습니다. 그게 전부입니다.
zeh

이 완료 콜백 내에서 동일한 함수를 호출하여 애니메이션을 반복 할 수 있습니까?
Tom

0

기본적으로 애니메이션이 완료 될 때 작업을 수행하는 세 가지 접근 방식이 있습니다. 첫째 : call (callback) 메서드에 전달 된 콜백을 사용할 수 있습니다. 두 번째 : 콜백도받는 stopAnimation을 사용할 수 있습니다. 세 번째 : 애니메이션 값에 리스너를 배치하고 현재 값에 따라 작업을 수행하는 제가 선호하는 방법입니다. 예를 들어 0에서 150까지 변환하고 애니메이션 값을 기반으로 '모션'이라고 말하고 모션이 값에 도달하면 무언가를 수행 할 수 있습니다.

let motion = Animated.Value(0);

motion.addListener(({value}) =>{
  if(value>=10){
    pos.stopAnimation((val)=>{console.log('stopped in '+val)});
  }
});

👉https : //www.youtube.com/channel/UCl5-W0A8tE3EucM7E_yS62A에 대한 자세한 내용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.