0

我正在开发一个应用程序,该应用程序需要依次翻转 300 张左右的图像,图像之间有 2 秒的延迟。

这些图像是在显示过程中动态生成的条形码。它们不是存储的图像。

显示在导航控制器中,我希望用户能够单击“后退”按钮,而不会因为选择器被发送到不再存在的实例而导致应用程序崩溃。

我知道可以为 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 回答