标题显示了多次按下按钮,但实际上我正在寻找堆叠多个事件的方法。我有一个聊天应用程序,可以同时接收许多聊天消息。在我的messageReceived函数中,我想滚动到最新聊天的底部。我遇到的问题是,有时可能同时收到许多消息(超过50条)。我已经确定,如果执行50次,滚动到底部是一个巨大的性能瓶颈,但是如果仅在收到消息之后执行,滚动效果会很好。

我想在我的messageReceived函数中延迟0.1秒后滚动到底部。但我希望在这0.1秒内发生的所有新聊天消息都可以“堆叠”,并且只发出一次滚动到最下层的请求。

我认为可以使用设置和取消计时器的系统来解决此问题,但是我无法做到这一点。有没有更好的办法可以做到这一点!谢谢!

最佳答案

如果您将延迟的“滚动到底部”请求设置为类似

[[self myObject] performSelector:@selector(scrollToBottom:)
                      withObject:nil
                      afterDelay:0.1];


然后您可以使用诸如

[NSObject cancelPreviousPerformRequestsWithTarget:[self myObject]
                                        selector:@selector(scrollToBottom:)
                                      object:nil];


那么scrollToBottom:唯一被调用的时间是未被取消的时间(因此,这是最后一次)。现在,您不需要计时器。

关于iphone - 多次按下按钮可导致ios cocoa 中的单个操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12829228/

10-11 14:36