我希望你能帮我弄清楚为什么某段代码不能正常工作我想要它 - 关于将图像加载到将填充网格的不同数组中。
我的程序有一个16格的网格(称为button1,button2等),每个网格都有一张图片,基本上是黑色图片,白色图片或绿色图片(黑白图片)所有瓷砖都是相同的,但每个绿色瓷砖(目前有32个是独一无二的))。当用户选择一个不同的级别时,只需通过屏幕上的“NEXT”或“PREVIOUS”按钮,就可以看出16个图标是否加载了相应的图标,这些图标取决于之前保存在阵列中的内容。
所以基本上如果图标标记为1-16,则下一级别为17-32等。当我从级别1移动到级别2时,我想将当前屏幕上的图像保存到数组中我称之为level1part1 ,然后将数组level1part2的内容加载到相同的方块中。当我从第2级移回到第1级时 - 我想将屏幕上的图像保存到level1part2,然后将level1part1数组的内容加载回屏幕上的16个图块。
所以最初加载屏幕时我在viewDidLoad方法中有以下声明:
UIImage *def = [UIImage imageNamed:@"silhouette.png"];
level1part1 = [[NSMutableArray alloc]initWithObjects:def, def, def, def, def, def, def, def, def, def, def, def, def, def, def, def, nil];
level1part2 = [[NSMutableArray alloc]initWithObjects:def, def, def, def, def, def, def, def, def, def, def, def, def, def, def, def, nil];
currentArray = [[NSMutableArray alloc]initWithObjects:def, def, def, def, def, def, def, def, def, def, def, def, def, def, def, def, nil];
def为黑色图像。我将在一秒钟内解释当前的数组。
我有两种方法,分别称为pressPreviousLevel和pressNextLevel:
- (IBAction)pressNextLevel:(UIButton *)sender {
NSMutableArray *nextLevelArray;
if (currentlevel == 1)
{
nextLevelArray = level1part2.mutableCopy;
[self.nextLevel setHidden:YES];
}
我声明了一个名为nextLevelArray的NSMutableArray,它将把我要投影的图像的内容保存到下一个屏幕上 - 在本例中是level1part2,因为我从level1到level2。
//// SAVING IMAGES ON SCREEN TO CURRENTARRAY
[currentArray replaceObjectAtIndex:0 withObject: button1.imageView.image];
[currentArray replaceObjectAtIndex:1 withObject: button2.imageView.image];
[currentArray replaceObjectAtIndex:2 withObject: button3.imageView.image];
[currentArray replaceObjectAtIndex:3 withObject: button4.imageView.image];
等
然后我填充我之前声明的currentArray数组与当前屏幕上的内容。
if (currentlevel == 1)
{
level1part1 = currentArray.mutableCopy;
}
然后我说,因为我在第1级 - 我想让level1part1等于这个currentArray;有效地将屏幕上的内容保存到此level1part1数组。
现在我想将level1part2中的内容加载到屏幕上的16个tile中:
// REPLACE IMAGES WITH PREVIOUS LEVELS IMAGES FROM ARRAY
button1.imageView.image = [nextLevelArray objectAtIndex:0];
button2.imageView.image = [nextLevelArray objectAtIndex:1];
button3.imageView.image = [nextLevelArray objectAtIndex:2];
button4.imageView.image = [nextLevelArray objectAtIndex:3];
等
currentlevel ++;
并增加当前水平。
对于pressPreviousLevel:
,情况类似- (IBAction)pressPreviousLevel:(UIButton *)sender {
NSMutableArray *previousLevelArray;
if (currentlevel == 2)
{
previousLevelArray = level1part1.mutableCopy;
[self.previousLevel setHidden:YES];
[self.nextLevel setHidden:NO];
}
/// SAVING IMAGES ON SCREEN TO CURRENTARRAY
[currentArray replaceObjectAtIndex:0 withObject: button1.imageView.image];
[currentArray replaceObjectAtIndex:1 withObject: button2.imageView.image];
[currentArray replaceObjectAtIndex:2 withObject: button3.imageView.image];
[currentArray replaceObjectAtIndex:3 withObject: button4.imageView.image];
等剩余的瓷砖。因此,如果我目前处于第2级(不能在第1级,因为我不能从那里向后),我声明一个名为previousLevelArray的NSMutableArray,它将保存本例中level1part1的内容。然后我将我在屏幕上看到的所有16个图像保存到currentArray中。
if (currentlevel == 2)
{
level1part2 = currentArray.mutableCopy;
}
现在,我问我目前处于什么级别并保存currentArray,它应该从屏幕上显示所有我的图标以便正确的数组 - 在这种情况下它应该是level1part2。
// REPLACE IMAGES WITH PREVIOUS LEVELS IMAGES FROM ARRAY
button1.imageView.image = [previousLevelArray objectAtIndex:0];
button2.imageView.image = [previousLevelArray objectAtIndex:1];
button3.imageView.image = [previousLevelArray objectAtIndex:2];
button4.imageView.image = [previousLevelArray objectAtIndex:3];
等
currentlevel --;
最后,我现在将我的图像从previousLevelArray(在本例中为level1part1)加载回屏幕。
所以,我的问题是这个 - 让我说我在Level 1上的第一个图标是绿色的(让我们称之为GREEN1) - 这对于该级别的那个图块是唯一的 - 当我按下一个,我的屏幕填充黑色图标,这是我想要的。然而,当我再次点击下一级别的第一个图标时,它会变为GREEN1图标,这不是我想要的 - 它仍然被保留 - 这会破坏我的程序。如果我做相反的事情也是如此 - 从第2级到第1级 - 第1级的第一个图标将变成第2级的第一个图标。
当您单击将更改图片的图标时,我的方法中没有任何内容,因此我确信此问题存在于此代码中。基本上它在屏幕上显示正确的图标,但是当我点击图标时 - 它仍然保留了前一个屏幕中的一些信息 - 好像它还没有完成加载或其他东西。
所以我的问题是,是否有人能够发现可能导致此问题的代码中发生的事情?我确信问题不在代码的其他地方 - 而且它是对我上面打印的代码的一个简单修复,以使其正常工作。
提前感谢您的帮助 - 如果此处有任何“错误代码”,请告诉我 - 始终愿意学习 - 我只是在短时间内使用Objective C。
答案 0 :(得分:2)
您需要使用-setImage:forState:
或-setBackgroundImage:forState:
来设置按钮的图像。
您可以为不同的控制状态设置不同的图像,例如UIControlStateNormal,UIControlStateHighlighted和UIControlStateSelected。