如何将 Images.xcassets 中的图像加载到 UIImage 中
Posted
技术标签:
【中文标题】如何将 Images.xcassets 中的图像加载到 UIImage 中【英文标题】:How to load images from Images.xcassets into a UIImage 【发布时间】:2016-04-19 01:45:29 【问题描述】:我正在尝试将图像编码为 UIImage,但我遇到了问题。我不确定如何为每个列表项的每个不同图像编码。我正在构建的应用是一个列表,每个列表项都附有图片。
下面是 MyWhatsit 类:
class MyWhatsit
var name: String
didSet
postDidChangeNotification()
var location: String
didSet
postDidChangeNotification()
var image: UIImage?
didSet
postDidChangeNotification()
var viewImage: UIImage
return image ?? UIImage(named: "camera")!
init( name: String, position: String = "" )
self.name = name
self.location = location
func postDidChangeNotification()
let center = NSNotificationCenter.defaultCenter()
center.postNotificationName(WhatsitDidChangeNotification, object: self)
下面是表格视图:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return things.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
let thing = things[indexPath.row] as MyWhatsit
cell.textLabel?.text = thing.name
cell.detailTextLabel?.text = thing.location
cell.imageView?.image = thing.viewImage
return cell
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
// Return false if you do not want the specified item to be editable.
return true
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if editingStyle == .Delete
things.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
else if editingStyle == .Insert
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
【问题讨论】:
请不要破坏您的帖子。 我想删除我的帖子。 @DavidSmith 您可以在您的问题上举起版主标志以提醒版主。但破坏它不是解决方案。写下你为什么要在标志内删除你的帖子。 @DavidSmith 现在你又破坏了它,一个自动标记已经升起,版主很快就会来查看你的情况。同时,请停止删除您帖子的所有内容。 【参考方案1】:我相信您需要做的就是创建一组图像,就像您使用标题和副标题一样。添加另一张图片时,将图像名称添加到数组并附加 tableView。
我在您的代码中看到的是名称和职位。看起来您需要添加“图像”并将其设置为图像的名称。例如,MyWhatsit(name: "Bob Smith", position: "midfielder", image: "bobSmithImage")
... 然后将单元格的图像视图设置为与图像名称相同。
希望这能让你感动!
【讨论】:
感谢您的反馈。我添加了一些代码。 没问题!我在您的代码中看到的是名称和职位。看起来您需要添加“图像”并将其设置为图像的名称。例如,MyWhatsit(name: "Bob Smith", position: "midfielder", image: "bobSmithImage") ...然后将单元格的图像视图设置为与图像名称相同。 我收到与图像名称相同的图像视图错误。你能给我一个示例代码吗? 你能告诉我你使用了什么代码以及 Xcode 给你的错误吗?【参考方案2】:您需要创建自己的个人类别。例如,根据玩家的位置对玩家进行排序。使用将图像存储到数组中的类。例如:
let goalkeeper = [UIImage(named:"ivanlucic"), UIImage(named:"manuelneuer")]
let rightBack = [UIImage(named:"danialves"), UIImage(named:"sergioramos")]
获得图像列表后,您可以在 cellForRowAtIndexPath
中进行检查,并将其引用到您创建的数组。
【讨论】:
感谢您的建议。我添加了一些代码,它会改变你的建议吗? 结构由您决定。你也可以这样做,但是我建议你把你的图片文件名改成和那个播放器的名字一样,这样在引用的时候就可以少写代码了。【参考方案3】:不明白你是如何在表格视图中设置代码的,但你可以添加像
这样的名称的图像名称其中 image 键包含您存储在 XCAssets 中的图像名称
var things: [MyWhatsit] = [
MyWhatsit(name: "Ivan Lucic", position: "Goalkeeper","image":"ivan"),
MyWhatsit(name: "Manuel Neuer", position: "Goalkeeper","image":"manuel")...]
而且你可以在初始化名字的同时初始化图片
init( name: String, position: String = "", imagename:string )
self.name = name
self.position = position
self.imgview = UIImage(named:imagename)
【讨论】:
谢谢。我添加了表格视图代码。这会改变你推荐的代码吗?以上是关于如何将 Images.xcassets 中的图像加载到 UIImage 中的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Images.xcassets 中的图像加载到 UIImage 中
在 Storyboard 的 UIImageView 中使用 Images.xcassets 中的启动图像?