2011-11-11 3 views
0

현재 문서 목록이 하나씩 표시되어 있습니다. 이러한 문서 중 일부가 다른 문서로 움직이면 (폴더를 만들기 위해) 이전 문서로 남아있는 빈 공간을 채우고 각각 165 픽셀 (각 문서 축소판의 높이)만큼 위로 이동합니다.애니메이션 이후에 사용 된보기가있는 공백을 채 웁니다.

그래서 나는 정확히 할 수 있다고 생각했습니다. 그러나 움직이는보기가 둘 이상있을 수 있으므로 실제로 작동하지 않습니다.

예를 들어, 문서 위에있는 2 개의 문서가 사라질 수 있으며 그 다음에 해당 문서 다음에 공백이 있고 그 다음에 2 개의 문서가 나오고 그 다음에 공백이 3 개 추가됩니다. 4 개의 문서.

예 : 얼마나 많은

  • 밖으로 찾기 :
    화이트 스페이스가 없어 문서를 나타냅니다, 검은 그 작동 할 수 있습니다 내가 방법을 결정
    example
    존재하는 문서를 나타냅니다 공백은 문서 위에 있습니다 (다른 문서에 닿을 때까지 문서 위에있는 공백의 총 수는 아니며 문서에 도달 할 때까지의 숫자)

후 얼마나 많은 픽셀

  • 계산 165

하여 현재 문서 상기 '투명'문서의 수를 승산하여 이동하고 모든 단일 문서에 대해이 과정을 반복 , 목록 맨 아래에서 시작하십시오.

그래서 몇 가지 코드를 작성했지만 모든 문서를 완전히 옮기지 않았습니다. 대신 첫 번째 문서는 이동하지만 다른 문서는 이동하지 않습니다. 문서 위의 빈 공간의 수입니다

incCtr :

여기 내 코드입니다.

for (int i = [documentThumbnails count]-1; i != 0; i--) { 
    int ctr = i; 
    int incCtr = 0; 

    //while there is a blank space, increment incCtr 
    while (![self thumbnailExistsAtSpecificIndex:ctr-1]) { 
     ctr--; 
     incCtr++; 
    } 

    uint32_t toMoveUpYCoordinate; 
    thumbnailView *object = [documentThumbnails objectAtIndex:i]; 

    toMoveUpYCoordinate = (165 * incCtr); 

    object.frame = CGRectMake(13, object.frame.origin.y-toMoveUpYCoordinate, object.frame.size.width, object.frame.size.height);; 
} 

이 문제에 대한 도움을 주시면 감사하겠습니다.

답변

0

좀 더 일반적으로 생각하면됩니다. 상자를 목록으로 그리면 목록을 렌더링 할 수 있습니다 (순서에 따라 상자의 위치를 ​​지정할 수 있습니다), 이제 하나 또는 두 개의 상자 (또는 임의의 숫자)를 제거하면됩니다. 애니메이션 블록에서 목록을 다시 렌더링하면 모든 작업이 완료됩니다.

체크 아웃 my article on doing exactly this. 격자에서 작동하지만 원리는 동일하지만 항목을 세로로 만 레이아웃하면됩니다.

관련 문제