当我们使用react-native-reanimated
为translateX
,scale
或opacity
之类的属性设置动画时,react-native-reanimated
在“本机” UI线程上运行动画。这些属性不会影响布局引擎,因此我们可以在主线程(JS)上完成布局,将值通过网桥传递给UI线程,然后对内容进行动画处理,而无需布局引擎的参与。
但是,当height
,padding
或margin
之类的属性设置为动画时,这并不是很清楚。这些属性会影响布局,因此我们需要在属性更改时更新布局。但是布局是由Java的主线程完成的。如果由于height
或padding
发生了变化,布局引擎必须在每一帧都处于活动状态,那么肯定会严重影响性能。
确实,在给padding
设置动画时,我目前遇到大量的性能问题。探查器告诉我,性能问题来自网桥。 UI线程似乎在每一帧都回调Javascript,也许是由主线程更新布局,然后布局又通过桥传递给本机。
但是,react-native-reanimated
提供了示例widthandheight/index.js
,该示例清楚地为诸如width
,height
和fontSize
之类的属性设置了动画,这些属性会影响布局。此示例以60fps的速度平稳运行。
react-native-reanimated
如何处理对布局有影响的动画?在动画的开始和结束以及在它们之间的唯一UI线程之间是否存在布局过程(这听起来像是实验性的Transitions功能,但我不是在谈论Transitions)。为了获得良好的性能,需要遵循一些特殊的方法吗?