사용자가 내 tableview 셀 중 하나를 누를 때 발생하는 애니메이션을 구현하려고합니다. 기본적으로 애니메이션은 나타나는 "+5"또는 "+1"과 같은 텍스트가있는 작은 레이블 일 뿐이며 페이딩 (기본적으로 사용자가 점수를 매기면서 포인트가 비디오 게임에 나타나는 것과 같은) 동안 위쪽으로 이동합니다. 내 컨트롤러의 tableView:didSelectRowAtIndexPath:
구현에서 애니메이션이 진행되는 동안 UITableView와 상호 작용할 수 없습니다.
CGRect toastFrame = /* figure out the frame from the cell frame here */;
UILabel *toast = [[UILabel alloc] initWithFrame:toastFrame];
toast.text = [NSString stringWithFormat:@"+%d", 5];
toast.backgroundColor = [UIColor clearColor];
toast.userInteractionEnabled = NO; // hoped this would work but it doesn't
[tableView addSubview:toast];
[UIView
animateWithDuration:1.0
animations:^
{
toast.alpha = 0.0;
toast.transform = CGAffineTransformMakeTranslation(0.0, -44.0);
}
completion:^ (BOOL finished)
{
[toast removeFromSuperview];
}];
[toast release];
을 토스트가 잘 나타나는 큰 보인다. 문제는 애니메이션이 완료 될 때까지 테이블 뷰가 터치 이벤트 수신을 중지한다는 것입니다. 즉, tableview에서 셀을 누른 후 1 초 동안 tableview에서 다른 셀을 누를 수 없습니다.
이런 일이 일어나지 않게하고 애니메이션이 전혀 일어나지 않는 것처럼 사용자가 계속 tableview와 상호 작용할 수있는 방법이 있습니까?
미리 감사드립니다.
Brilliant! 그랬어. 블럭 방식을 사용하는 것에 대한 좋은 점은 블록이 외부에서 뷰를 자동으로 유지하므로 완료 핸들러가 호출되기 전에 수동으로 임시 뷰가 삭제되지 않도록 걱정할 필요가 없다는 것입니다. 또한 공식적으로 권장되는 방법으로 당신에게 모호한 만족감을 줄 수 있습니다 :) – glenc
5 년 후 당신은 여전히 내 하루를 구했습니다. 고맙습니다! –