我有一个简单的 iphone 应用程序,它使用 CALayer 的子类绘制块,并试图找到保存状态或保留当前创建的图层的最佳方法。
我尝试使用Brad Larson 在上一个问题中关于在 NSUserDefaults 中存储自定义对象的答案,这有助于保持我的 CALayer 子类,但它不是几何和背景颜色等基本状态,所以它们在那里但没有在重新启动时呈现。
我使声明的实例变量符合 NSCoding 协议,但不知道如何在不重新声明所有属性的情况下使 CALayer 的属性执行相同的操作。或者这不是完全正确/最好的方法吗?
这是我用来存档图层数组的代码:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:viewController.view.layer.sublayers] forKey:@"savedArray"];
这是我用来在 -viewDidLoad 中重新加载图层的代码:
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedArray"];
if (dataRepresentingSavedArray != nil) {
[self restoreStateWithData:dataRepresentingSavedArray];
在 -restoreStateWithData 中:
NSArray *savedLayers = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if (savedLayers != nil) {
for(layer in savedLayers) {
[self.view.layer addSublayer:layer];
}
[spaceView.layer layoutSublayers];
}