我正在创建一个效果,将UITableView
向下滚动到底部,创建一个UILabel
并将其放在用户输入文字的UITextView
之上,然后将UILabel动画到新的UITableViewCell's
帧上。它与在iOS7的默认SMS应用程序中发送新消息时使用的效果大致相同。除了一个部分之外,我已经完成了所有操作,并且将新创建的UITableViewCell
的alpha设置为0,因此当UILabel
为其设置动画时,它看起来像空白。我尝试了以下内容:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_randomData.count-1 inSection:0];
CustomCell *cell = (CustomCell*)[self.tableView cellForRowAtIndexPath:indexPath];
[cell.textLabel setAlpha:0.0f];
这里的问题是,由于UITableView
向下滚动并插入单元格,因此每当我尝试访问特定的UITableViewCell
时,它都为空。如果有帮助,则动画由以下方式触发:
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
这是因为一旦用户点击“发送”按钮,我就会使用scrollToRowAtIndexPath
将用户带到桌面视图的底部:
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:_randomData.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
我尝试在cellForRowAtIndexPath
中设置alpha,但由于所有单元格都在UITableView
向下滚动时重新创建,因此我将所有重用的UITableViewCell's
alpha设置为0显然是行不通的。
总而言之,我真的只想将新创建的单元格的alpha设置为0,然后在动画完成后将其设置为1。有什么想法吗?
谢谢!
答案 0 :(得分:1)
首先,你应该设置你的alpha和动画 以下方法(参见文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:willDisplayCell:forRowAtIndexPath:)
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
为了产生类似的效果,我必须在我的模型中存储一个值,告诉我我的单元格是否是新创建的单元格,并在上面的函数中使用它,如下所示:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
MyModelItem* item = [MyModel itemAtIndex:indexPath.row];
if(item.wasJustCreated) {
item.wasJustCreated = NO;
cell.alpha = 0.0;
[UIView animateWithDuration:0.4 animations:^{
cell.alpha = 1.0;
}];
}
}
您必须在细胞模型项中添加“wasJustCreated”等字段,该字段初始化为NO。它可能不是最优雅的解决方案,但按预期工作,并且易于实现。
答案 1 :(得分:0)
原来最简单的方法是:
1。)按下“发送”按钮时,禁用用户交互
2。)在scrollViewDidEndScrollingAnimation
中,按下按钮后,添加了对象,并将用户带到了桌面视图的最底部:
CustomCell * cell = [[self.tableView visibleCells] lastObject];
[cell.contentView setAlpha:0.0f];
3。)将动画的代码放在
下面4。)将单元格的alpha设置回1,并在动画的完成块中重新打开用户交互。