0

私の 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 ピクセルのサイズに設定します
  • その配列のメモリを作成しますか?
  • 次に、データに基づいて、そのビンに値がある場合は、数値を追加して、後でその領域に値を描画できるようにします。
4

2 に答える 2

0

コメントアウトされたロジックは、常に 0 または 2 になります。@"A" との比較から設定したものは、次の if/else によって無条件に上書きされます。

于 2012-05-16T22:12:10.370 に答える
0

文脈から、私はこれを推測しています:

mapBins = 1024;

...次のようになります。

mapBinSize = 1024;

またsnpMapBins、投稿したコードには言及されておらず、話しているコードはコメントアウトされています。

投稿したコードは、実際に実行しているものを表していないようです。実際のコードを投稿していただけますか?

于 2012-05-16T22:13:34.140 に答える