如何在 Swift 中将绘图保存到 tableview?

Posted

技术标签:

【中文标题】如何在 Swift 中将绘图保存到 tableview?【英文标题】:How do I save a drawing to a tableview in Swift? 【发布时间】:2015-10-26 05:02:14 【问题描述】:

我正在制作一个简单的绘图应用程序,当我按下保存按钮时,我试图将我的绘图保存在表格视图中。我使用 UIImageView 来允许用户绘制。这是使用 NSUserdefaults 保存图像的正确方法吗?如何将其保存在表格视图中?谢谢!这是我放入保存按钮的代码:

@IBAction func saveButton(sender: AnyObject) 


self.navigationController?.popToRootViewControllerAnimated(true)
self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.toolbarHidden = false


UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()



let data = UIImagePNGRepresentation(image)
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(data, forKey: "drawing")
userDefaults.synchronize()



    

【问题讨论】:

【参考方案1】:

虽然允许,但我们不应该使用 NSUserDefaults 来保存图像等大量数据。您可以像这样轻松地使用文件系统:

保存图片:

UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let data = UIImagePNGRepresentation(image)

let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let fileURL = documentsURL.URLByAppendingPathComponent("myImage.png").path!

data?.writeToFile(fileURL, atomically: true)

然后稍后获取图像并将其放在您的UITableView

获取图片:

let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let fileURL = documentsURL.URLByAppendingPathComponent("myImage.png").path!
let image = UIImage(contentsOfFile: fileURL)

【讨论】:

字符串 myImage.png 我可以放任何东西吗?因为在用户按下保存之前不会创建图像。 正确 - 这是您的图像的名称! 获取图像的代码我应该把它放在 MasterViewController 的 viewDidAppear 中的 tableview 吗? 这完全取决于您的需要,何时需要图像。我做延迟加载 - 在需要之前加载图像。如果保证能显示图片,可以在viewDidAppear加载。【参考方案2】:

您需要创建一个 UITableViewController 并使用用户默认设置的图像填充它。

您需要将图像保存在一个数组中并在 UITableViewController 中获取该数组。然后在 UITableViewDataSource 函数中,您将返回一个填充有来自 NSUserDefaults 的相应绘图的单元格。

你需要实现:

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

您可能应该考虑将图像保存在核心数据或文件系统中。比较适合这种存储方式。

【讨论】:

以上是关于如何在 Swift 中将绘图保存到 tableview?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将 CGImage 保存到数据中?

如何在 Swift 中将位置面包屑保存到 CoreData

如何在 Swift 中归档和取消归档自定义对象?或者如何在 Swift 中将自定义对象保存到 NSUserDefaults?

如何在 Swift 中将字符串数组保存到 Core Data

如何在 Swift 中将 JSON 数据保存到 UserDefault? [复制]

如何在 Swift 中将可转换属性保存到 Core Data