0

モジュールのカウントに問題があります。私は次のことをしています。

- (void)makeGrid:withData:(NSDictionary * )data
{
    NSLog(@"aantal is: %d",[data count]);

    int xStart = 0;
    int yStart = 0;
    int xCurrent = xStart;
    int yCurrent = yStart;



    int xStepSize = 165;
    int yStepSize = 251;

    int xCnt =  3  ;
    int yCnt = [data count] % 3;

    int cellCounter = 0;

    UIView * gridContainerView = [[UIView alloc] init];
    [keeperView addSubview:gridContainerView];

    for (int y = 0; y < yCnt; y++) {
        for (int x = 0; x < xCnt; x++) {
            printf("xCurrent %d  yCurrent %d \n", xCurrent, yCurrent);
            NSString *url1 = @"player_imgUrl";
            NSString *url2 = [NSString stringWithFormat:@"%i", x];

            NSString *url3 = [url1 stringByAppendingString:url2];
            NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[data objectForKey:url3]]];
            UIImage* myImage = [[UIImage alloc] initWithData:imageData];

            UIImageView * myView = [[UIImageView  alloc] initWithImage:myImage];
            CGRect rect = myView.frame;
            rect.origin.x = xCurrent;
            rect.origin.y = yCurrent;
            myView.frame = rect;
            myView.tag = cellCounter;
            [gridContainerView addSubview:myView];

            //just label stuff
            UILabel * myLabel = [[UILabel alloc] init];

            [gridContainerView addSubview:myLabel];
            //--------------------------------

            xCurrent += xStepSize;
            cellCounter++;
        }

        xCurrent = xStart;
        yCurrent += yStepSize;
    }

    CGRect repositionRect = gridContainerView.frame;
    repositionRect.origin.y = 100;
    gridContainerView.frame = repositionRect;

}

私のNSLogは、私のデータオブジェクトには16個の値があると言っています。そして、それを実行すると、3つのimageviewsしか表示されません。誰かが私が間違っていることを知っていますか?

助けてください、

よろしくお願いします。

4

2 に答える 2

0

コードを読んだ後、imageviewsの数は(xCnt * yCnt)になります。

あなたの問題はここにあります:

int yCnt = [データ数]%3;

データが16の場合、yCntは1です。そのため、結果は3つのイメージビューのみになります。

この問題を解決するには、次のことを行う必要があります。

yCnt = (data.count / xCnt) + 1;

for (int y = 0 ; y < yCnt; y++)
{
    for (int x = 0; x < xCnt; x++)
    {
        if ((y == (yCnt - 1)) && (x > (data.count % xCnt)))
        {
            break;
        }
        else {
            // Your Grid code here
        }
    }
}

お役に立てれば。

于 2012-10-04T12:42:35.953 に答える
0
int yCnt = [data count] % 3;

[データ数]==16の場合に1を返します。

于 2012-10-04T12:43:48.530 に答える