【问题标题】:Gif animation from 383 .gif's [closed]来自 383 .gif 的 Gif 动画 [关闭]
【发布时间】:2013-05-19 10:54:45
【问题描述】:

我在 adobe flash 中创建了一个 gif 动画,现在我想在 Xcode 中将它导入到我的应用程序中。我有 383 个 gif 图像(帧),我编写了这段代码来创建流畅的动画:

#import "ViewController.h"
#define IMAGE_COUNT       383




@interface ViewController ()

@end

@implementation ViewController




- (void)viewDidLoad
{

            [super viewDidLoad];

    //////////////////


    // Build array of images, cycling through image names
    for (int i = 0; i < IMAGE_COUNT; i++)
     imageView.animationImages = [[NSArray alloc]initWithObjects:[UIImage imageNamed:
                               [NSString stringWithFormat:@"picollage00%d.gif", i]],nil];


    imageView.animationRepeatCount = 5;
    [imageView startAnimating];


    // Do any additional setup after loading the view, typically from a nib.
}

图像是这样的,然后图像计数到 piclage0383.gif

【问题讨论】:

  • 我猜你有一个问题要问?
  • 是的,我想回答我该怎么做
  • 您所做的是在每次循环时创建一个新的NSArray。你想要做的是在循环外创建一个NSMutableArray 并调用 `[mutableArray addObject:[UIImage ...]];抱歉没有提供完整的答案,但我在移动设备上......希望你明白;)
  • 因为这段代码不起作用
  • mm,能不能给个完整的答案?

标签: objective-c


【解决方案1】:

在您的代码中还有另一个语义错误:您从图像picollage000.gif 开始,但它应该是picollage0001.gif,不是吗?
我使用 if 子句和 for 循环中的另一个条件更改了它。

#import "ViewController.h"
#define IMAGE_COUNT 383

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *imageArray = [[NSMutableArray alloc] initWithCapacity:0];
    // Start with image picollage0001.gif
    for (int i = 1; i <= IMAGE_COUNT; i++)
        if (i < 100)
            if (i < 10)
                [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"picollage000%d.gif", i]]];
            else [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"picollage00%d.gif", i]]];
        else [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"picollage0%d.gif", i]]];

    // Assuming `animationImages` is an NSArray
    imageView.animationImages = [imageArray copy];
    imageView.animationRepeatCount = 5;
    [imageView startAnimating];
}

上面是经过测试的代码(循环),它生成正确的文件名并将初始化的UIImages 存储在NSMutableArray 中。

注意:根据gifs 的大小,将所有图像放入数组中可能是个坏主意(巨大的内存分配)。如果它是一个缓慢的动画,你应该在需要它们之前加载图像并在立即使用它们后释放它们。

【讨论】:

  • 这个不行,语法错误很多
  • 是的,正如我所说,我在 iPhone 上,因此我不想发布答案......但是,我相信你能够修复它们 ;)
  • 你可以稍后发布吗?
  • @user2332018:看看我编辑的答案!这对我有用,所以它应该对你有用。如果没有,或者如果您有任何问题,请告诉我 ;)
猜你喜欢
  • 2021-05-13
  • 2012-01-30
  • 2023-03-21
  • 2019-08-03
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
相关资源
最近更新 更多