Joe*_*ppo 1 cocoa cocoa-touch core-animation calayer uikit
我有一个简单的iphone应用程序,使用CALayer的子类绘制块,并试图找到保存状态或持久保存当前创建的图层的最佳方法.
我尝试使用Brad Larson之前关于在NSUserDefaults中存储自定义对象的问题的答案,这些对象用于持久化我的CALayer子类,但不是它的基本状态,如几何和背景颜色,所以它们在那里,但没有重新启动渲染.
我使我声明的实例变量符合NSCoding协议但不知道如何使CALayer的属性做同样的事情而不重新声明它的所有属性.或者这不是正确/最好的方法吗?
这是我用来存档图层数组的代码:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:viewController.view.layer.sublayers] forKey:@"savedArray"];
Run Code Online (Sandbox Code Playgroud)
以下是我用于在-viewDidLoad中重新加载图层的代码:
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedArray"];
if (dataRepresentingSavedArray != nil) {
[self restoreStateWithData:dataRepresentingSavedArray];
Run Code Online (Sandbox Code Playgroud)
并且in -restoreStateWithData:
NSArray *savedLayers = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if (savedLayers != nil) {
for(layer in savedLayers) {
[self.view.layer addSublayer:layer];
}
[spaceView.layer layoutSublayers];
}
Run Code Online (Sandbox Code Playgroud)
准确地说,根据Apple文档,CALayer实际上是模型,而不是MVC模式中的视图.
"CALayer是图层树对象的模型类.它封装了一个图层的位置,大小和变换,它定义了它的坐标系."
图层后面的视图实际上是图案的视图部分.没有支持视图时无法显示图层.
在我看来,它应该是数据序列化的完全合法的候选者.看一下CALVer的KVC Extensions.特别注意:
- (BOOL)shouldArchiveValueForKey:(NSString *)key
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |