Цель-C: логический вопрос - PullRequest
1 голос
/ 09 марта 2011

Эй, ребята, у меня тут небольшие проблемы. У меня есть вид, который делает отображение сетки. Я имею в виду, у меня есть 9 предметов и наборов для отображения 3 в каждой строке. В результате в 3 строки. Это нормально. То, что я не понимаю, это то, почему я всегда получаю пробел между ними. Иногда это происходит и в середине строк. Пробел равен высоте одной строки.

Проверьте код:

NSInteger quantidadeDeVideos = [self.videosURL count];
NSInteger contadorDeVideos = 0;

NSInteger idLinha = 0;
NSInteger linha = 1;
NSInteger itemq = 0;

while (contadorDeVideos < quantidadeDeVideos) {

    float f;
    float g;

    // Set the lines

    if (itemq < 3) {
        itemq++;
    }
    else {
        itemq = 1;
        linha++;
    }

    // This makes the second line multiplies for 150;
    if (linha > 1) {
        g = 150;
    }
    else {
        g = 0;
    }


    // Ignore this, this is foi make 1,2,3. Making space between the itens.

    if (idLinha > 2) {
        idLinha = 0;
    }


    NSLog(@"%i", foi);

    float e = idLinha*250+15;
    f = linha*g;

    UIImageView *thumbItem = [[UIImageView alloc] init];
    thumbItem.frame = CGRectMake(e, f, 231, 140);

    UIColor *bkgColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"VideosItemBackground.png"]];
    thumbItem.backgroundColor = bkgColor;
    thumbItem.opaque = NO;

    [self.videosScroll addSubview:thumbItem];

    contadorDeVideos++;
    idLinha++;

}

Это результат должен быть:

[] [] []
[] [] []
[] [] [] * * +1010

И вот что я получаю:

[] [] []

[] [] []
[] [] []

Спасибо за все!

1 Ответ

1 голос
/ 09 марта 2011

Когда linha равно 1, g равно 0, что составляет linha * g 0. Для последующих строк g равно 150, что составляет linha * g == 300 для второй итерации (скачок 300 за первое), после чего оно увеличивается на 150 каждый раз. Вместо условной установки g каждый раз, вы должны просто сделать его константой 150, а затем либо использовать (linha - 1) * g для значения f, либо просто начать linha с 0.

Если вы хотите увидеть, как определить проблему самостоятельно:

  1. Спросите себя, что здесь не так?

    • Прямоугольники нарисованы на один ряд слишком низко
    • Это происходит только после первого ряда
  2. Итак, мы смотрим на линию, которая отвечает за то, где нарисованы прямоугольники:

    thumbItem.frame = CGRectMake(e, f, 231, 140)
    
  3. Переменная f является координатой y. Это должно быть то, что испортили. Давайте посмотрим, как определяется f:

    f = linha*g;
    
  4. ОК, linha - номер строки, и он изменяется только один раз в цикле без какой-либо условной логики. Так что проблема, вероятно, g. Давайте посмотрим, как это определяется:

    if (linha > 1) {
        g = 150;
    }
    else {
        g = 0;
    }
    
  5. Эй, g меняется после первой итерации - именно тогда, когда наша проблема возникает. Давайте посмотрим, каковы значения linha*g:

    1 * 0 = 0
    2 * 150 = 300 (+300)
    3 * 150 = 450 (+150)
    4 * 150 = 600 (+150)
    

Ах-ха - проблема в том, что установка g в 0 на первой итерации нарушает шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...