如何将视图层次结构和内容输出到文件?

How to output a view hierarchy & contents to file?

我正在编写一个美化的 'paint' 应用程序,用户可以在其中粘贴图像,绘制一堆 UIBezier 曲线,然后移动所有这些东西并旋转它们。

其中大部分是通过将 UIImageView 和(子类)UIView 作为子视图堆叠到视图控制器中的主视图上来实现的。

我希望用户能够将他们的创作状态保存为某种文件并与他人共享(例如通过 DropBox)。

保存本身不是问题(我知道如何保存文件!),问题只是 'best' 将所有信息从应用程序获取到文件然后将其加载回文件的方法.

我猜已经有完善的框架可以做到这一点,但奇怪的是,还没有找到任何解决这个问题的方法。

因此,在我着手编写自己的自定义方法来执行所有这些操作之前,我想我会问:

是否有一些推荐的、批准的(甚至可能 'easy' ;-))方法来实现保存——就像写入文件一样——a 的所有子视图的状态给定 UIView?

你对我的建议"trying to do"?谢谢。

tl;博士

往下走:
NSKeyedArchiver.archiveRootObject(view, toFile: "/path/to/archive")

即将推出:
let view = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive")

)

UIView conforms to NSCoding

NSCoding enables the creation of archives,其中

provide a means to convert objects and values into an architecture-independent stream of bytes.

现在我们已经有了拼图的所有部分,让我们把它们放在一起:

我们知道我们需要一个存档器,所以让我们搜索文档,直到找到有希望的东西:

宾果! NSKeyedArchiver

让我们使用此 class 将 UIView 序列化为具有 archiveRootObject:toFile:. Then we'll deserialize it from a file with unarchiveObjectWithFile: 的文件。

保存到文件:
NSKeyedArchiver.archiveRootObject(view, toFile: "/path/to/archive")

正在从文件读取
let view = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive")