0

私は、画像間に2秒の遅延を加えて、300枚ほどの画像を順番にめくる必要があるアプリに取り組んでいます。

これらの画像は、表示中にオンザフライで生成されるバーコードです。保存された画像ではありません。

ディスプレイはナビゲーションコントローラーにあり、存在しないインスタンスに送信されたセレクターからアプリがクラッシュすることなく、ユーザーが「戻る」ボタンをクリックできるようにしたいと考えています。

UIImageView をアニメーション化できることはわかっていますが、メモリの問題のために大量の画像配列を作成したくありません。

バーコードを生成し、画像を表示し、2 秒遅らせてから、次の画像で繰り返すというループでこれを行いたいと思います。

次のコードは機能しますが、「戻る」ボタンをクリックするとクラッシュし、「割り当て解除されたインスタンスにメッセージが送信されました」というエラーが表示されます。

   NSSet *dataSet = [self fetchDataSet];

    for (MyBarCode *data in dataSet) {

        // display barcode in UIImageView
        [self updateBarCodeImage:data ];

        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow: 2.0]];
    }

このタイマーをキャンセルする方法はないようです。または、viewWillDisapear でキャンセルできます。

これを行う正しい方法は何ですか?

animationImages の例だけを指摘しないでください。私はすでにそれらすべてを見てきましたが、アニメーション中にこれらすべての画像をメモリに保持する必要はありません。アニメーション中にその場で画像を生成する方法があれば、それは興味深いでしょう。

4

2 に答える 2

1

私はこのようなものがうまくいくはずだと思います:

__weak ViewController *bSelf = self;
NSSet *dataSet = [self fetchDataSet];
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(myQueue, ^{
    __strong ViewController *sSelf = bSelf;

    for (BoardingPass *data in dataSet) {
    {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [sSelf updateBarCodeImage:data]
        });
    }

});
于 2013-05-29T20:30:41.063 に答える
0

更新しました:

あなたが何を探しているのか正確にはわかりません。はいより単純なアニメーションについて話している場合、Cocos 2D はやり過ぎです。その場合、このチュートリアルを実行することをお勧めします。これは、以前に取り組んでいたプロジェクトに関する多くのアイデアを与えてくれました。

http://www.raywenderlich.com/2454/how-to-use-uiview-animation-tutorial

于 2013-05-29T20:49:07.250 に答える