繁体   English   中英

清除 CALayer

[英]Clear a CALayer

我使用CALayerCATextLayers在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM