我有卡UITableView
。每次我想在按下绘图按钮后添加新卡片时,我希望它从视图中心移动到表格中的位置,它应该放置一些基本动画。我已设法使用以下代码获取新绘制卡片的目的地:
cellRectInTableDrawnCard = [[self playerCardsTable] rectForRowAtIndexPath:drawnCardIndexPath];
cellInSuperviewDrawnCard = [[self playerCardsTable] convertRect:cellRectInTableDrawnCard toView:[[self playerCardsTable] superview]];
但是,要确定cellRectInTableDrawnCard
我需要使用playerCardsTable
重新加载reloadData
,但这会显示已提取的卡片。它只是几分之一秒,因为我将新卡放在表中,动画在reloadData
之后触发。动画后不能重新加载,因为我没有drawnCardIndexPath
。
有没有办法在没有重新加载tableview的情况下获取rect?或者,有没有办法可以在reloadData
之后隐藏新单元格并在动画完成后显示它?
谢谢!
答案 0 :(得分:0)
您可能希望插入行并单独填充它,而不是执行完整的表重新加载。
代码片段显示了一个使用insertRowsAtIndexPaths:indexPathArray的按钮来添加一个新行,它为您提供动画内容的单元格。 当你完成动画时,只需使用reloadRowsAtIndexPaths来填充单元格值(显示你的卡片,我猜)。
当你应该显示新卡时(在你调用reloadRowsAtIndexPaths之后),使用bool来决定cellForRowAtIndexPath。
- (IBAction)butAddCardToHandAction:(id)sender {
// Add a blank record to the array
NSString *strCard = @"New Card";
_showCard = NO;
[_arrayHandCards addObject:strCard];
// create the index path where you want to add the card
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:(_arrayHandCards.count - 1) inSection:0];
NSArray *indexPathArray = [NSArray arrayWithObjects:indexPath,nil];
// Update the table
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:indexPathArray withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
// Ok - you got a blank record in the table, get the cell rect.
CGRect cellRectInTableDrawnCard = [[self tableView] rectForRowAtIndexPath:indexPath];
NSLog(@"My new rect has y position : %f",cellRectInTableDrawnCard.origin.y);
//Do the animation you need to do and when finished populate the selected cell
_showCard = YES;
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
控制单元格中显示的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Set up the cell and use boolean to decide what to show
NSString *strToDisplayInCell;
if (!_showCard)
{
strToDisplayInCell = @"";
}
else
{
NSString *strToDisplayInCell = [_arrayHandCards objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15];
cell.textLabel.text = strToDisplayInCell;
}
return cell;
}