2016-07-16 5 views
1

NavigatorがシーンShiftEditの下に移動すると、トランジションアニメーション中に遅れが発生します。アニメーションはすぐに開始されますが、1ミリ秒間停止します。 InteractionManagerは、4つのピッカーコンポーネントのレンダリングを延期するために使用されます。すべてのピッカーコンポーネントには、配列から構築された項目のリストがあります。多くのアイテムがあります。ピッカーコンポーネントがShiftEditでまだレンダリングされていなくても、これが計算され、これが遅れの理由ですか?私を手伝ってくれますか?アニメーション中にネイティブAndroidラグに反応します

'use strict' 
    import React, {View, Text, StyleSheet, InteractionManager, TouchableOpacity} from 'react-native'; 
    import { connect } from 'react-redux'; 
    import Spinner from 'react-native-spinkit'; 
    import StyleCommon from '../styles'; 
    import TimePicker from '../components/time-picker'; 
    import ColorPicker from '../components/color-picker'; 
    import LabelPicker from '../components/label-picker'; 


    class ShiftEdit extends React.Component { 
     constructor(props) { 
     super(props); 

     this.state = { 
      isReady: false, 
      shiftId: '', 
      startHour: '', 
      endHour: '', 
      color: '', 
     } 
     } 

     componentDidMount() { 
     InteractionManager.runAfterInteractions(() => { 
      this.setState({isReady: true}); 
     }); 
     } 

     onChangeItem = (label, val) => { 
     let data = {}; 
     data[label] = val; 
     this.setState(data); 
     } 

     renderPlaceholder() { 
     return (
      <View style={styles.container}> 
      <Text>Loading...</Text> 
      </View> 
     ) 
     } 

     render() { 
     if (!this.state.isReady) { 
      return this.renderPlaceholder(); 
     } 

     return (
      <View style={{flex:1, flexDirection: 'column'}}> 
      <TimePicker label={'Start hour'} value={this.state.startHour} onChange={this.onChangeItem.bind(this, 'startHour')} /> 
      <TimePicker label={'End hour'} value={this.state.endHour} onChange={this.onChangeItem.bind(this, 'endHour')} /> 
      <ColorPicker label={'Color'} value={this.state.color} onChange={this.onChangeItem.bind(this, 'color')} /> 
      <LabelPicker label={'Shift ID'} value={this.state.shiftId} onChange={this.onChangeItem.bind(this, 'shiftId')} /> 
      </View> 
     ) 
     } 
    }; 

私はそれはまだ同じクリスが示唆したように、アニメーションの登録をコントロールしようとしましたが、私が直接InteractionManagerとは経験をしたんよう

onPress =() => { 
    let handle = InteractionManager.createInteractionHandle(); 
    this.props.navigator.push({component: 'shiftedit'}); 
    InteractionManager.clearInteractionHandle(handle); 
    } 

答えて

0

はここで野生の推測です。しかし、Interaction Manager Docsを見てから、私はアニメーションを登録する方法があることに気付きました。だから、私の推測は、ナビゲータのアニメーションが正しく登録されていないということです。だから多分このようなものを試してみてください...

var handle = InteractionManager.createInteractionHandle(); 
// run your navigator.push() here... (`runAfterInteractions` tasks are queued) 
// later, on animation completion: 
InteractionManager.clearInteractionHandle(handle); 
// queued tasks run if all handles were cleared 

希望に役立ちます!

0

は実はこれが今私の作品唯一のソリューションです。...その代わりShiftEditでInteractionManagerを使用しての

+0

componentDidMount() { // InteractionManager.runAfterInteractions(() => { // this.setState({isReady: true}); // }) setTimeout(() => { this.setState({isReady: true}); }, 75); } 

が、私はむしろInteractionManagerを使用したい、あなたはInteractionManager.runAfterInteractionsを使用して試すことができます各ピッカーコンポーネントのcomponentDidMount内にありますか?それが役に立ったら教えてください! – narayanan

+0

こんにちは、私はすでにそれをチェックしましたが、それは同じ動作、私はRN 0.22を使用する可能性がありますこれは事実です。 –

関連する問題