私の Objective-C はかなり錆びているか、存在しません。私は、このコードを変更して問題を解決するために、このコードがどのように機能するかを理解しようとしています。このコードは基本的に、データに基づいて、iPad UIView のピクセル位置に (密度や縦棒グラフのように、iPad の幅に沿って) 線を描画します。データから、割り当てる値を計算し、別のメソッドが情報を引き出します。
.h ファイルでは、この ivar が宣言されています。
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 を 1 画面の長さまたは 1024 ピクセルのサイズに設定します
- その配列のメモリを作成しますか?
- 次に、データに基づいて、そのビンに値がある場合は、数値を追加して、後でその領域に値を描画できるようにします。