React-Native不支持的布局动画

时间:2015-05-04 13:51:03

标签: ios animation react-native layout-animation

尝试渲染我的场景,其中包含一个SlideMenu,其中每个项目都会更改我的内容视图,我收到了错误:

[RCTLog][tid:0x7f8f7054b4b0]
[RCTUIManager.m:466]>Unsupported layout animation createConfig property (null)

我认为它来自SlideMenu布局的动画,但只有当它触发“片段”的更改时才会发生。 (点击内容视图)点击其中的项目。否则菜单会正常关闭。

点击"解雇"我的片段显示得很好,但我没有看到SlideMenu关闭。

我不知道这是来自动画本身还是元素和动画一起变化的组合。

以下是我的一些代码:

toggleSlideMenu: function() {
  if (this.state.slideMenuIsAccessible){
    if(this.state.menuIsOpen) {
      //close Menu
    } else {
      //open Menu
    }
    queueAnimation(this.props.animation);
    this.center.setNativeProps({left: this.offset}); //updates UI
  }
});

片段选择发生在generalTemplate:

  matchIdToFragment: function(fragmentId) {
    switch (fragmentId) {
      case 'suggestions':
        return <Suggestions />;
      case 'onScreen':
        return <OnScreen />;
      case 'zap':
        return <Zap setFragmentId={this.props.setFragmentId} setItemId={this.setItemId}/>;
      case 'programDetails':
        return <ProgramDetails itemId={this.state.itemId}/> ;
    }
  },
  render: function() {
    var fragment = this.matchIdToFragment(this.props.fragmentId);

    return (
      <View style={styles.container}>
        <View style={styles.fragmentView}>
          {fragment}
        </View>
        <NavigationBar 
          onOpenUserMenu={this.onOpenUserMenu}
          toggleSlideMenu={this.toggleSlideMenu}/>   
      </View>
    );
  }

按菜单中的项目会触发关闭菜单(并将ID,这里没有显示,发送到generalTemplate:

var Section = React.createClass({
  onPress: function() {
    this.props.toggleSlideMenu();
  },
  render: function() {
    return (
      <TouchableHighlight underlayColor='#DFDFDF' onPress={this.onPress}>
        //Name and icon of the menu item  
      </TouchableHighlight>
    );
  }
});

动画的代码(不确定它有用,但我们永远不知道):

var LayoutAnimation = require('react-native').LayoutAnimation;
var DEFAULT_ANIMATION = 'linear';

var animations = {
  layout: {
    linear: {
      duration: 300,
      create: {
        type: LayoutAnimation.Types.linear,
      },
      update: {
        type: LayoutAnimation.Types.linear,
        springDamping: 0.7,
      },
    },
  },
};

var layoutAnimationConfigs = {
  'spring': animations.layout.spring,
};

module.exports = function(animation) {
  var _animation = layoutAnimationConfigs[animation];
  if (!_animation) {
    _animation = layoutAnimationConfigs[DEFAULT_ANIMATION];
  }

  LayoutAnimation.configureNext(_animation);
}

1 个答案:

答案 0 :(得分:1)

在Github here上被问及有人回答我:

我在动画定义中的创建部分缺少一个属性:

create: {
    type: LayoutAnimation.Types.linear,
    property: LayoutAnimation.Properties.opacity,
},