sky*_*guy 4 message ios swift swift3 ios10
好吧,我知道这对每个人来说都是新的,但我认为这是一个简单的概念 - 我在这里遵循这个来制作自定义贴纸消息应用程序扩展:
https://code.tutsplus.com/tutorials/create-an-imessage-app-in-ios-10--cms-26870
我已经完全复制了所有内容,并尝试创建一个基本的 MSStickerBrowserView 显示(然后使用逻辑过滤,但尚未尝试)我在我的资产文件夹中的贴纸 png:
该教程似乎没有从资产加载,而只是从他们的项目加载,无论他们的代码在这里是否旧:
var stickers = [MSSticker]()
func loadStickers() {
for i in 1...2 {
if let url = Bundle.main.urlForResource("Sticker \(i)", withExtension: "png") { //ERROR!!
do {
let sticker = try MSSticker(contentsOfFileURL: url, localizedDescription: "")
stickers.append(sticker)
} catch {
print(error)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误
Bundle 没有成员 URLforResource
我找不到任何关于此的信息。如何在应用程序中以编程方式显示我的贴纸?
错误:
这些是我尝试加载的图像,无论其名称如何:
本教程不使用资产目录的原因是,在调用包上的 urlForResource 方法时,您无法获得放置在 .xcassets 文件夹中的图像的有效文件 URL。
您需要像添加其他文件一样单独添加您的资产。此时在包上调用 pathForResource 或 urlForResource 将不再返回 nil。
编辑:这是一个函数,它将获取文件夹名称,遍历其内容并返回 [MSSticker]?基于它发现的
func createStickers(from folderName: String) -> [MSSticker]? {
guard
let path = Bundle.main.resourcePath
else { return nil }
var stickers = [MSSticker]()
let folderPath = "\(path)/\(folderName)"
let folderURL = URL(fileURLWithPath: folderPath)
//get a list of urls in the chosen directory
do {
let imageURLs = try FileManager.default.contentsOfDirectory(at: folderURL,
includingPropertiesForKeys: nil,
options: .skipsHiddenFiles)
//loop through the found urls
for url in imageURLs {
//create the sticker and add it, or handle error
do {
let sticker = try MSSticker(contentsOfFileURL: url, localizedDescription: "yourDescription")
stickers.append(sticker)
} catch let error {
print(error.localizedDescription)
}
}
} catch let error {
print(error.localizedDescription)
}
//return nil if stickers array is empty
return stickers.isEmpty ? nil : stickers
}
Run Code Online (Sandbox Code Playgroud)
这应该让您只需调用它并获得您所追求的:
let stickers = createStickers(from: "YourFolderName")
Run Code Online (Sandbox Code Playgroud)
请注意不要在文件夹名称的开头包含正斜杠 ('/')。
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |