![](/img/trans.png)
[英]CALayer - clear internal rendering context in favor of custom drawing code
[英]Clear a CALayer
我使用CALayer和CATextLayers在 iPhone 上的數獨網格上布置數字。
我有一個列出一些數獨的 tableView。 當我點擊一個表格單元格時,它會在另一個視圖控制器中顯示數獨,該視圖控制器被推送到導航 controller。
在我的- (void)viewWillAppear
... 方法中,我調用了我的- (void)loadSudoku
方法,我將在下面向您展示。
問題是當您查看一個數獨時,go 使用導航欄中的“返回”按鈕返回表格視圖,然后點擊另一個數獨。 然后舊數獨還在,新數獨在舊數獨之上繪制。
我想我需要以某種方式清除舊的。 有任何想法嗎? 我確實通過實際數獨網格的界面生成器設置了背景圖像。 我不想刪除這個。
繪制數獨的方法如下所示:
- (void)loadSudoku
{
mainLayer = [[self view] layer];
[mainLayer setRasterizationScale:[[UIScreen mainScreen] scale]];
int col=0;
int row=0;
for(NSNumber *nr in [[self sudoku] sudoku])
{
if([nr intValue] != 0)
{
//Print numbers on grid
CATextLayer *messageLayer = [CATextLayer layer];
[messageLayer setForegroundColor:[[UIColor blackColor] CGColor]];
[messageLayer setContentsScale:[[UIScreen mainScreen] scale]];
[messageLayer setFrame:CGRectMake(col*36+5, row*42, 30, 30)];
[messageLayer setString:(id)[nr stringValue]];
[mainLayer addSublayer:messageLayer];
}
if(col==8)
{
col=0; row++;
}else
{
col++;
}
}
[mainLayer setShouldRasterize:YES];
}
要僅刪除文本圖層,您可以執行以下操作 -
NSIndexSet *indexSet = [mainLayer.sublayers indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
return [obj isMemberOfClass:[CATextLayer class]];
}];
NSArray *textLayers = [mainLayer.sublayers objectsAtIndexes:indexSet];
for (CATextLayer *textLayer in textLayers) {
[textLayer removeFromSuperlayer];
}
簡而言之,第一條語句獲取作為根層子層的文本層的所有索引。 然后在第二個語句中,我們將所有這些層放在一個單獨的數組中,然后我們將它們從它們的超級層中移除,也就是我們的根層。
原始答案
嘗試這樣做,
mainLayer.sublayers = nil;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.