我使用 CALayer 和 CATextLayers 在 iPhone 上的数独网格上布置数字。
我有一个表视图列出了一些数独。当我点击其中一个表单元格时,它会显示在另一个视图控制器中,该控制器被推到导航控制器上。
在我的
问题是当您查看一个数独,然后使用导航栏中的“返回”按钮返回到表视图,然后再点击另一个数独时,旧的数独仍然存在,并且新的数独绘制在旧的数独之上。
我想我需要以某种方式清除旧的数独。有什么想法吗? 我确实通过接口生成器设置了实际数独网格的背景图像。我不想删除它。
绘制数独的方法如下:
我有一个表视图列出了一些数独。当我点击其中一个表单元格时,它会显示在另一个视图控制器中,该控制器被推到导航控制器上。
在我的
- (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];
}
indexesOfObjectsPassingTest:*(id obj
应该是indexesOfObjectsPassingTest:^ (id obj
对吗?然而,这个:return [[obj class] isMemberOfClass:[CATextLayer class]];
在每个对象上都返回false... - Linusreturn [obj isMemberOfClass:[CATextLayer class]];
。 - Deepak Danduprolu