iOS7 可以从添加到 xCode 项目的图集中访问图像(不是纹理)



我在我的xCode项目中添加了许多图集(folder.atlas),通常使用它们按名称为我的精灵创建SKTextures。但是,现在我看到我可能需要在Sprite Kit和基于UIView的类之间共享一些图像。

    SKTexture* texture = [[SKTextureAtlas atlasNamed:@"Jetpack"] textureNamed:imageName];
//how to get UIImage?

有没有办法让我在运行时从图集中获取 UIImage?

现在回答这个问题可能为时已晚,但这在我们开发精灵套件时是一个非常普遍的问题。苹果没有提供任何功能来直接解决此问题。我所做的对我来说很好。

我需要从阿特拉斯炸药访问任何图像。

NSString *str = imageName;
str = [str stringByReplacingOccurrencesOfString:@".png" withString:@""];
str = [[str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]] componentsJoinedByString:@""];
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:str];
UIImage *atlasImage;
if (atlas.textureNames.count > 1)
{
    SKTexture *texture = [atlas textureNamed:[atlas.textureNames objectAtIndex:0]];
    atlasImage = [UIImage imageWithCGImage:texture.CGImage];
}

是的,你可以,但我警告你,它不会很漂亮。我不会在这里写出整个代码,因为这会花费太多时间。

如果您查看应用程序包,您会注意到所有 atlas 文件夹都附加了一个"c"(可能用于编译)。

如果我的项目中有一个名为"graphics.atlas"的地图集。在我的捆绑包"资源"中,我将找到一个"graphics.atlasc"文件夹。它有两个或多个文件(取决于图集的大小,spritekit 可以将其拆分)。

这些文件:图形.1.png图形列表

两者都可以通过任何基于 UIKit 的代码随意访问。不过,您需要浏览一下 plist 文件并解析它以找到适合您的图像的位置。这不是超级容易,但绝对是可以做到的。

我很想写一个"SKTextureAtlas+UIImage"类,也许以后。

最新更新