微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

清除CALayer

如何解决清除CALayer

| 我使用CALayer和CATextLayers在iPhone的数独网格上布置数字。 我有一个tableView列出了一些数独。当我点击一个表格单元格时,它在另一个viewController上显示了数独,并已推到导航控制器上。 在我的
- (void)viewWillAppear
...方法中,我将调用
- (void)loadSudoku
方法,下面将向您展示。 问题是当您查看一个数独时,使用导航栏中的“返回”按钮返回表格视图,然后点击另一个数独。然后旧的数独仍然存在,并且新的数独被绘制在旧的数独之上。 我想我需要以某种方式清除旧的文件。有任何想法吗? 我确实通过实际的数独网格的界面生成器设置了背景图像。我不想删除它。 绘制数独的方法如下所示:
- (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;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。