React Native 是Facebook早先于2015年4月开源的跨平台移动应用开发框架,是开源的JS框架 React 在原生移动应用平台的衍生产物。

目前支持iOS和安卓两大平台。

RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。

在知力科技,软件技术工程师们也常常需要使用,并在实践中提炼和总结了在React Native中创建一个很棒的页面动画组件的5个技巧,一起来看下。

1:不要使用动画

在react-native中执行动画时,Animated是一个比较的低级API。但是,和所有低级API类似,它有点复杂,并且会产生大量不清晰的代码。

你的大部分动画都可以用LayoutAnimation和react-native- animatable制作。它们是更加高级的API和操作起来也更简单。我强烈建议您使用它们,您可以立即完成大部分任务。

2:为所有动画使用相同的组件

在两个不同的组件或页面上执行同一个变化是很难实现的。你也必须在他们之间复制一些代码。最简单的方法是改变组件某些部分的样式来为其设置动画效果。

页面变化的动画是这种的最大缺点。由于在您的router中不会有两个不同的页面,因此您将丢失后退按钮的处理。

3:使用相对定位

在React Native中没有fixed定位。在ListView中,不能用position: ‘absolute’, top: 0让组件移动到页面的顶部。当组件移动到ListView的顶部时,位置却不在您所滚动的位置。

你可以用measureInWindow来知道你的View在页面中的位置。例如 :

 

class MyComponent  extends Component {

onPress() {

this.props.onPress();

this.refs.container.measureInWindow((x, y) => this.setState({

windowPos: { x, y },

}));

};

 

render() {

const containerPos = this.state.windowPos ? {

position: ‘relative’,

top: – this.state.windowPos.y + appStyle.navbar.height,

} : {};

 

return (

<TouchableWithoutFeedback onPress={this.onPress}>

<View style={[styles.container, containerPos]} ref=”container”>

{content}

</View>

</TouchableWithoutFeedback>

);

}

}

4:让父组件知道动画

当你开始执行列表上的一个元素的动画时,ListView需要知道状态的变化。您将不得不淡出所有其他元素并禁用滚动。不要忘记接受父组件onAnimationStart或onPress的回调。

5:处理退出动画

你正在执行的动画可能很棒,但不要忘记正在退出的动画!请注意,如果在退出期间删除多余的元素,则无法在LayoutAnimation之外为其设置动画效果。

在我的示例中,我等待LayoutAnimation的结尾后隐藏了底部文本。由于这个原因,我可以使用react-native-animatable退出动画。

class TvShowListItem extends Component {

componentWillUpdate() {

const animation = LayoutAnimation.create(500, ‘easeInEaseOut’, ‘opacity’);

LayoutAnimation.configureNext(animation, () => this.setState({ exitEnded: true }));

}

onPress() {

if (this.state.opened) {

this.refs.description.fadeOutDownBig();

return  this.setState({opened: false,  exitEnded: false});

}

this.setState({ opened: true });

};

render() {

const { opened, exitEnded } = this.state;

return (

<TouchableWithoutFeedback onPress={this.onPress}>

<View style={[styles.container, containerPos]} ref=”container” >

{ content }

{ (opened || ! exitEnded) && (

<Animatable.View

animation=”fadeInUpBig”

style={styles.description}

duration={800}

ref=”description”

delay={400}

>

<Text style={styles.descriptionText}>{this.props.tvShow.overview}</Text>

</Animatable.View>

)}

</View>

</TouchableWithoutFeedback>

);

}

}

总结:

以上就是在React-native中如何制作一个很好的组件来展示页面动画的5个技巧,希望与软件工程师们一起讨论,一起成长!

 

Comments are closed.