在xCode 9之前,当我想用图像创建UIImageView时,我会将图像拖到项目侧栏并创建一个具有该文件名称的UIImage。这很有效,一切都很好。
然而,使用Xcode 9,这将无法正常工作。它将无法找到该文件,即使它位于主包中。我需要做的是将图像放入Assets文件夹,然后它就能找到图像并在UIImageView中显示它。
同样,在使用Sprite Kit时,我会在桌面上创建一个带有.atlas扩展名的文件夹,将所有图像拖入其中,然后拖动项目中的.atlas文件夹。然后我创建一个名为.atlas文件夹的SKTextureAtlas,它有效。然而,使用Xcode 9,这再次无效。我会在控制台中找到'Texture Atlas'foo'无法找到'的消息。所以我转到Assets文件夹,单击添加图标并选择New Sprite Atlas,重命名该文件夹,然后将我的图像拖入其中。现在创建具有该名称的纹理图集。
我现在正在尝试做什么,并且遇到麻烦,正在使用init(filedNamed:“foo.mov”)创建一个SKVideoNode,正如您所猜测的,如果您将文件拖入项目中,这将不再有效边吧。所以我想也许我再次需要通过Assets文件夹以某种方式做到这一点。我发现当我将.mov文件添加到Assets文件夹时,它会被创建为“数据”类型(“数据”显示在Assets文件夹中其框的右上角)。我现在能做的是:
let d = NSDataAsset(name: "foo") // 'foo' is the .mov file in Assets
d.data // the underlying content
原来d不是nil,这是个好消息,但访问底层内容的唯一方法就是.data,而且你不能用数据创建一个SKVideoNode。我还想加载一个声音文件,我曾经这样做过:
let a = SKAction.playSoundFileNamed("bar.mp3", waitForCompletion: false)
但是我收到消息'错误加载声音资源:“bar.mp3”'。