2013-08-28 3 views
3

나는 UITableView이고 다시 나타날 행을 움직이게하고 싶습니다. 또한 애니메이션 사이를 전환하려면 일부 셀이 UITableViewRowAnimationLeft과 다른 셀 UITableViewRowAnimationRight을 가져야합니다. 하지만 내 UITableViewController 함께이 기능을 구현하는 방법을 모르겠습니다. 나는 cellForRowAtIndexPath에 코드의 다음 줄을 삽입하려고 :스크롤 할 때 UITableViewCells 슬라이드

[self.tableView beginUpdates]; 
NSArray *updatePath = [NSArray arrayWithObject:indexPath]; 
[self.tableView reloadRowsAtIndexPaths:updatePath 
         withRowAnimation:UITableViewRowAnimationLeft]; 
[self.tableView endUpdates]; 

대신 셀에 슬라이딩의, 세포의 순서가 변경 또는 그들 중 일부는 두 번 나타났다. 또한 셀 생성 후이 줄을 삽입하려고했습니다.

if (cell == nil) { 
... 
} else { 
    [self.tableView beginUpdates]; 
    NSArray *updatePath = [NSArray arrayWithObject:indexPath]; 
    [self.tableView reloadRowsAtIndexPaths:updatePath 
          withRowAnimation:UITableViewRowAnimationLeft]; 
    [self.tableView endUpdates]; 

답변

8

테이블이 화면에 셀을 표시하는 프로세스를 시작한 후에는 성공적으로 행을 다시로드하지 못할 것이라고 생각합니다. reloadRowsAtIndexPath은 일반적으로 cellForRowAtIndexPath을 호출하므로 무한 루프에 빠지지 않는다는 것에 놀랍니다. 대신 테이블이 나쁜 상태에 빠지게됩니다.

이 경우에는 willDisplayCell에 셀의 변형 속성을 조작하여 직접 애니메이션을 작성하는 것이 좋습니다. 당신은 같은 것을 할 수 있습니다

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (<should animate cell>) { 
     CGFloat direction = <animate from right> ? 1 : -1; 
     cell.transform = CGAffineTransformMakeTranslation(cell.bounds.size.width * direction, 0); 
     [UIView animateWithDuration:0.25 animations:^{ 
      cell.transform = CGAffineTransformIdentity; 
     }]; 
    } 
} 

당신은 "셀 애니메이션한다"에 대한 논리를 제공해야합니다 - 당신은 아마 초기로드에 셀 애니메이션을 원하지 않는다.

+0

Thx. 나는 당신의 해결책을 시도 할 것입니다. 첫 번째 행을 초기화 할 때이 기능을 구현하는 것이 좋지 않을 것이라고 생각합니다. 이런 식으로하면 초기로드시 문제가 될까요? –

+0

그냥 보는 방법에 따라 달라집니다. –

+0

메시지를 작성한 사람에 따라 대화이며 메시지와 함께 행이 왼쪽 또는 오른쪽으로 움직여야합니다. –

관련 문제