我的Objective-C非常生疏或不存在。我试图找出这个代码是如何做的,以便修改它并遇到一些麻烦。此代码基本上根据其拥有的数据在ipad UIView上的像素位置(沿着iPad的宽度,如密度或列图)绘制线条。从数据中,它计算要分配的值,然后另一个方法绘制信息。
在.h文件中,声明了这个ivars
ushort *mapBins;
int mapBinSize;
int mapBinMin;
int mapBinMax;
然后在.m(注释掉的代码就是我想要做的)
mapBins = 1024;
mapBins = malloc(mapBinSize * sizeof(ushort));
memset(mapBins, 0, mapBinSize * sizeof(ushort));
int pixelPos = 0;
// populate bins
for (int l=0; l<[locs count]; l++) // locs is a member variable that has positions to draw where there is valid data, everything else is blank
{
int sLoc = [[locs objectAtIndex:l] intValue];
pixelPos = (sLoc - self.startPos) / [self basesPerPixel];
int index = pixelPos;
if (index > mapBinMax) {
continue;
}
if (index < 0 )
{
continue;
}
// if ([m.type rangeOfString:@"A"].location == NSNotFound) {
// mapBins[index] = 0;
// }
// else {
// mapBins[index] = 1;
// NSLog(@"1");
// }
// if ([m.type rangeOfString:@"T"].location == NSNotFound) {
// mapBins[index] = 0;
// }
// else {
// mapBins[index] = 2;
// NSLog(@"2");
// }
mapBins[index] += 1;
}
return YES;
}
所以使用他们的代码,在绘图代码中,它基本上检查
if (mapBins[posX] == 0) {
[blank setStroke];
}
else {
[YELLOW_COLOR setStroke];
}
每个像素。所以现在我想根据数据中的信息更改颜色。就像在注释掉的代码中一样,它显示了我正在尝试做的一部分。
我不明白的是,我将mapBin [index]设置为0以外的其他东西。我在控制台上看到NSLog(@“1”)语句。但是,如果我通过执行以下操作在循环结束时记录输出:NSLog(@"%i", mapBins[posX]);
我得到0作为输出。当我尝试绘制它时,由于值为0,我得到一个空白笔画而不是彩色笔画。
我不明白在C中发生了什么?我收集的是他们这样做(虽然可能是错的):
答案 0 :(得分:0)
你注释掉的逻辑总是会产生0或2.无论你从比较到@“A”设置的是什么,都是无条件写下来的if / else。
答案 1 :(得分:0)
从上下文来看,我猜这个:
mapBins = 1024;
......应该是这样的:
mapBinSize = 1024;
在您发布的代码中也没有提到snpMapBins
,而您正在谈论的代码已被注释掉。
您发布的代码看起来并不能代表您实际运行的代码。你能发一下实际的代码吗?