我有一个带有变换和绝对位置的视图,我想将视图位置设置为它的变换,然后激活一个 layoutAnimation。
意思是,我想设置一个view位置为X,位置设置好后,配置一个layoutAnimation,将它的位置设置为Y。
class someComponent extends React.Component {
state: {
transform: 100,
top: 0
}
someFunction = () => {
this.setState({ top: this.state.transform, transform: 0 });
LayoutAnimation.configureNext( someAnimationConfig );
this.setState({ top: 500 });
}
render = () => {
return(
<View style={
someStyles,
{
transform: [ { translateY: this.state.transform } ],
top: this.state.top
}
}>
</View>
)
}
}
调用时想要的行为someFunc
是视图将其位置设置为其变换并重置其变换(这纯粹是技术性的,没有视觉效果),然后启动动画
我怀疑这没有发生的原因是因为动画仅在渲染时触发,并且由于我连续两次更改状态,因此这两次更改都发生在render
调用之前,并且位置仅更新一次。
解决我的问题的另一种方法是离开转换,并将屏幕移动到(wantedPosition - currentTransform)
,但这看起来很难看,如果有更干净更优雅的方式来处理这种情况,我正在徘徊
我做所有这些都是为了实现一个可滑动的视图,我宁愿不使用额外的库或依赖项
一些我试过的员工
在第一个 setState 的回调中调用第二个 set state 和动画配置,相同的行为
didAnimationFinish
添加两个 LayoutAnimatiom,将第一个动画设置为“即时”(延迟为 0),并在第一个 setState 之后调用它,并在回调中使用第二个 setState 调用第二个。这个接近工作了,但问题是第一个动画不是即时的,你不能设置延迟为 0,当设置延迟为 1 时,你可以看到位置为 0 的视图和一帧的变换 0,之后第一个动画完成在第二个动画开始之前有一个小的延迟。尽管我相信有一种方法可以消除第二个动画之前的小延迟,但你仍然会有一个“错误”的帧