2012-05-15 1 views
4

두 섹션 (상단 섹션과 하단 섹션)이있는 UITableView가 있습니다. 항목이 상단 섹션 (섹션 0)에서 "선택 해제"되면 항목을 하단 섹션 (섹션 1)으로 이동하고 그 반대도 마찬가지입니다. 모든 것이 애니메이션 작업에 크게 효과적입니다.reloadSections 문제 : withRowAnimation 애니메이션

다음을 사용하고 있지만 행 이동이 느립니다. 다른 앱에서 더 나은 결과를 얻었습니다. 상단 섹션의 행을 맨 아래 섹션에 깨끗하게 애니메이트하고 맨 아래 섹션의 행을 맨 위에있는 섹션에 확인하거나 선택하지 않을 때 깨끗하게 애니메이션을 적용하고 싶습니다.

멋진 부드러운 애니메이션을 제작하려면 어떻게해야합니까?

편집 :

문제점을 발견했습니다. 이 방법 대신에 다음과 같이 작성해야합니다.

//NSIndexSet *sectionIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)]; 

    // set the guests arrival status and use animation 
    [guestList beginUpdates]; 
    if (!guest.didArrive) { 
     [guest setDidArrive:YES]; 
     [guestList reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom]; 
    } else { 
     [guest setDidArrive:NO]; 
     [guestList reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop]; 
    } 
    [guestList endUpdates]; 
[guestList reloadData]; 

내가 주석 처리 한 첫 번째 줄에 유의하십시오. 나는 원래 이것을 첨가하는 것을 게을리했다. 보시다시피 제대로 구축되지 않은 NSIndexSet을 사용하고있었습니다.

답변

7

문제가 해결되었습니다. 편집 된 응답을 참조하십시오. 코드는 다음과 같아야합니다.

// set the guests arrival status and use animation 
[guestList beginUpdates]; 
if (!guest.didArrive) { 
    [guest setDidArrive:YES]; 
    [guestList reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationBottom]; 
} else { 
    [guest setDidArrive:NO]; 
    [guestList reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationTop]; 
} 
[guestList endUpdates]; 
[guestList reloadData]; 
+0

이것은 정답입니다. [tableView reloadData]가 자동으로 트리거되는 이유를 이해하지 못합니다. 이 기능이 넘쳐서는 안됩니까? – Benjamin

+10

Dude, reloadData를 호출하면 "reloadSections"를 수행하는 모든 코드와 그와 같은 것들이 쓸모 없게됩니다. ReloadData는 모든 것을 다시로드합니다. 그래서 당신은 reloadData를하거나 또는 reloadSections/reloadRows/etc를 수행하여 테이블의 어느 부분을 다시로드 할 것인지를 선택하십시오. –

4

왜 함수의 끝에서 guestList의 데이터를 다시로드해야합니까? 원하는 섹션을 이미 다시로드하고 있습니다. 제거하고 다시 확인하십시오.

+0

감사합니다. 게시하기 전에 실제로 reloadData없이 시도했습니다. 테이블 뷰가 없으면 테이블 뷰가 제대로 업데이트되지 않습니다. reloadSections와 함께 추가 코드를 사용해야합니까? 이 애니메이션을 이해할 수 없어 내 검색에서 도움이되는 것을 찾을 수 없었습니다. – mySilmaril