Имам изглед за рисуване с пръсти, който прилагам отмяна/възстановяване. Цялото чертане се извършва на CGLayer, наречен lineLayer.
Веднага след като потребителят докосне екрана, но преди да бъде направена каквато и да е модификация на екрана, трябва бързо да взема съдържанието на изгледите и да създам ниво за отмяна.
Очевидно запазването на изгледа на диск не е опция, защото отнема твърде много време. Решението, което си представях, е да копирам CGLayer в речник, използвайки нещо подобно:
// I copy the layer as a NSValue
NSValue *layerCopy = [NSValue valueWithBytes:&myLayer objCType:@encode(CGLayerRef)];
Съхранявам го в речник
NSString *aKey = [NSString stringWithFormat:@"%d", [number intValue]];
[self.dictUNDO setObject:layerCopy forKey:aKey];
по-късно го извличам с помощта на
NSString *myKey = [NSString stringWithFormat:@"%d", [number intValue]];
NSValue *myCopy = [self.dictUNDO objectForKey:myKey];
[myCopy getValue:&lineLayer];
//lineLayer is the CGLayer where the drawing happens
проблемът е, че lineLayer изобщо не се променя от тази операция за четене. Продължава да има същото съдържание като преди.
Изпускам ли нещо?
Благодаря.