1

我正在开发的应用程序的一部分涉及一个消息传递界面,我正在尝试制作类似于 iOS 消息应用程序的界面。当收到或发送新消息时,我希望表格视图向下滚动并显示插入动画。

到目前为止,我基本上已经这样做了:

- (void)didReceiveNewMessage:(...) {
    [messages addObject:...];                            // add the new message to an array
    NSIndexPath *newIndexPath = [NSIndexPath ...];       // find out where the new cell goes
    [tableView insertRowAtIndexPath:newIndexPath ...];   // animate the insertion of the new message
    [tableView scrollToRowAtIndexPath:newIndexPath ...]; // do the scrolling
}

如果消息传入缓慢,则此方法有效。但是,如果我非常快地给自己发送一堆消息,我注意到表格视图会“变得混乱”。

例如,如果我快速发送消息 1、2、3、4、5、6,表格视图将动画插入 1、2、3 和 4,然后停止滚动。如果我真的手动向下滚动表格视图,我可以看到下面的 5 和 6。有谁知道更好的方法来做到这一点?

我确实尝试setContentOffset:滚动表格视图,但这具有相同的效果。

4

1 回答 1

-1

这里的根本问题是我很懒惰并且使用CGAffineTransformMakeTranslation而不是手动计算新帧,因为我忘记了当transform属性更改时,根据 Apple 文档,帧变为“未定义”。

它最终工作正常,直到大量消息进入,此时表格视图的框架会变得混乱并以某种方式偏移,这会导致表格视图的底部显示得比它应该的略低。

经验教训:不要在一个动画中混合帧计算和变换。要么按照框架保留所有内容,要么按照转换保留所有内容并使用center+ bounds

于 2012-07-19T23:56:05.497 回答