我的 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 中不理解的事情?我收集的是他们正在这样做(虽然可能是错误的):
- 将 mapBinSize 设置为一屏长度或 1024 像素的大小
- 为该数组创建内存?
- 然后根据数据,如果该 bin 有值,则添加一个数字,以便稍后在该区域绘制一个值。