Iphone 多个按钮的按下导致ios cocoa中的单个操作

Iphone 多个按钮的按下导致ios cocoa中的单个操作,iphone,ios,xcode,timer,Iphone,Ios,Xcode,Timer,标题上说有多个按钮按下,但实际上我想堆叠多个事件。我有一个聊天应用程序,可以同时接收许多聊天信息。在我的messageReceived功能中,我想滚动到最近聊天的底部。我遇到的问题是,有时许多消息(50+)会同时传入。我已经确定,如果执行50次,滚动到底部是一个巨大的性能瓶颈,但如果只在收到消息后执行,效果会非常好 我想在messageReceived函数中延迟一段时间(比如0.1秒)后滚动到底部。但我希望在这0.1秒内出现的所有新聊天信息都“堆叠”,并且只发出一个滚动到底部的请求 我认为一个设

标题上说有多个按钮按下,但实际上我想堆叠多个事件。我有一个聊天应用程序,可以同时接收许多聊天信息。在我的messageReceived功能中,我想滚动到最近聊天的底部。我遇到的问题是,有时许多消息(50+)会同时传入。我已经确定,如果执行50次,滚动到底部是一个巨大的性能瓶颈,但如果只在收到消息后执行,效果会非常好

我想在messageReceived函数中延迟一段时间(比如0.1秒)后滚动到底部。但我希望在这0.1秒内出现的所有新聊天信息都“堆叠”,并且只发出一个滚动到底部的请求


我认为一个设置和取消计时器的系统可以解决这个问题,但是我不能正确地使用它。有没有更好的方法来实现这一点!谢谢

不是一个精确的解决方案,而是一个可以引导正确方向的东西。您可以在.h文件中设置一个标志,并使用该标志确定是否已调用该方法

init
方法中,将标志设置为

self.didCallScrollToBottomMethod = FALSE;
滚动到bottommethod
中,检查以下条件:

if (!self.didCallScrollToBottomMethod) {
   self.didCallScrollToBottomMethod = TRUE;
   //set the timer here to scroll after 0.1 seconds
}
在计时器方法中,滚动完成后,将标志设置为

self.didCallScrollToBottomMethod = FALSE;

如果您正在使用以下命令设置延迟的“滚动到底”请求

[[self myObject] performSelector:@selector(scrollToBottom:) 
                      withObject:nil 
                      afterDelay:0.1];  
然后您可以使用一个cancel命令,如

[NSObject cancelPreviousPerformRequestsWithTarget:[self myObject]
                                        selector:@selector(scrollToBottom:)
                                      object:nil];  
然后,您的
scrollToBottom:
唯一被调用的时间是它没有被取消的时候(所以,是最后一次被取消)。现在你不需要计时器了