2011-03-09 5 views
1

안녕 얘들 아, 여기 좀 곤란 해. 그리드 디스플레이를 만드는보기가 있습니다. 내 말은, 나는 9 개의 항목을 가지고 있고, 한 줄에 3 개를 표시하도록 설정되어있다. 3 줄로 결과. 괜찮아. 내가 understang하지 않는 것은, 왜 항상 그들 사이에 공간을 얻을 수 있습니다. 때로는 라인의 중간에 올라옵니다. 이 공간은 한 줄의 높이와 같습니다.Objective-C : 논리 질문

체크 코드 :

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

:

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++; 

} 

이 결과이어야 인

그리고 이것은 내가 갖는 것입니다 :

[] [] []

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

모두를위한 감사합니다!

답변

1

linha은 1, gg 그것에 의해 증가 된 후 두 번째 반복 (제 위에 (300)의 점프)에 대한 linha * g == 300을, 150는 후속 라인 용 linha * g 0하게 0 매번 150 번. 대신 조건부마다 통해 g을 설정하는, 당신은 단지 그것을 일정 (150)을해야 다음 중 하나 f의 값 (linha - 1) * g을 사용하거나 직접 문제를 발견하는 방법을 보려면 단지 0

에서 linha를 시작합니다 :

  1. 무엇이 잘못 되었습니까?

    • 사각형은 너무 낮은 하나 개의 행을 그려되고있다
    • 사각형이 그려진 곳은 후
  2. 그래서 우리가 책임이 라인에서 보면 첫 번째 행을 을 발생합니다

    thumbItem.frame = CGRectMake(e, f, 231, 140) 
    
  3. 변수 f은 y 좌표입니다. 이것은 엉망이 된 것입니다. 의는 f 정의하는 방법을 보자 :

    f = linha*g; 
    
  4. OK, 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) 
    

아 - 하 - 문제는 첫 번째 반복에 0-g를 설정하면 패턴을 나누기 때문이다.

+0

아, 그게 효과가 있었어! 나는 단지 이것을 보지는 못했다. 고마워요! –

+0

+1 좋은 설명. –