如何在短时间内将新插入的UITableViewCell的alpha设置为0

时间:2014-02-07 17:08:26

标签: ios iphone objective-c uitableview

我正在创建一个效果,将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。有什么想法吗?

谢谢!

2 个答案:

答案 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,并在动画的完成块中重新打开用户交互。