如何在 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 中归档和取消归档自定义对象?或者如何在 Swift 中将自定义对象保存到 NSUserDefaults?
如何在 Swift 中将字符串数组保存到 Core Data