1

元に戻す/やり直しを実装しているフィンガーペインティングビューがあります。すべての描画は、lineLayer と呼ばれる CGLayer で行われます。

ユーザーが画面に触れるとすぐに、画面に何らかの変更が加えられる前に、ビューのコンテンツをすばやく取得して元に戻すレベルを作成する必要があります。

時間がかかりすぎるため、ビューをディスクに保存することは明らかにオプションではありません。私が想像した解決策は、次のようなものを使用して、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 がまったく変更されないことです。今まで通りの内容で続けています。

何か不足していますか?

ありがとう。

4

2 に答える 2

0

レイヤーからビットマップコンテキストを作成するなど、ディープコピーを実行しようとしましたか?

于 2011-06-02T18:05:14.660 に答える
0

オブジェクトを管理するためのコア データを検討しましたか? 元に戻す/やり直しが無料で付いてくるので聞いていますか?

于 2011-06-02T18:23:56.090 に答える