2016-04-25 22 views
2

現在、iOS(iPad 4)用の基本的な1ページのReact Nativeアプリ(iPad 4)は、カメラのフィードを表示し、画像シーケンスをオーバーレイします。この画像シーケンスは149フレームで構成され、連続してループします。React Nativeで画像シーケンスを処理する方法

Imageコンポーネントのソースを24回/秒で置き換えることで、イメージシーケンスループを実現しました。

ここにappクラスがあります(スタイル小道具はありません)。

class App extends Component { 

    constructor(props) { 
     super(props); 

     this.state = { 
      frame: 1 
     }; 
    } 

    componentDidMount() { 
     setInterval(() => { 
      let frame = this.state.frame; 

      frame++; 

      if (frame > 149) { 
       frame = 1; 
      } 

      this.setState({frame}); 
     }, 1000/24); 
    } 

    render() { 
     return (
      <View style={styles.container}> 
       <Camera ref={(cam) => {this.camera = cam}}> 
        <Text>Frame: {this.state.frame}</Text> 
        <Image source={{uri: `./gifs/${this.state.frame}.gif`}}/> 
       </Camera> 
      </View> 
     ); 
    } 

} 

これはこれを出力として示しています。

Image of the app.

私は取得しています問題は、時間の長さを変化させた後にアプリがクラッシュします。場合によっては、クラッシュする前に3秒間実行することも、クラッシュする前に2分間実行することもあります。

これはメモリの問題だと思っていますが、Xcodeのデバッガでは使用可能なメモリの約10%しか使用していませんでした。どういうわけか、必要な画像だけをメモリに読み込んで、私が使っていない画像を削除するか、これが自動的に管理されるのですか?

+0

こんにちは。画像のストリームが自動的にgifに保存されているのか、どういうふうに舞台裏でやっているのですか?私は未処理のストリームデータにアクセスしようとしているので、残念ながらできません – allisius

答えて

3

try react-native-spriteは、javascriptのsetIntervalソリューションの代わりにネイティブUIImageViewを使用して画像シーケンスをアニメートします。

関連する問題