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

时间:2012-10-10 22:11:09

标签: iphone ios xcode timer

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

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

我认为设置和取消计时器的系统可以为此工作,但我无法做到正确。是否有更好的方法来实现这一目标!谢谢!

2 个答案:

答案 0 :(得分:1)

如果您使用类似

的设置来设置延迟的“滚动到底部”请求
[[self myObject] performSelector:@selector(scrollToBottom:) 
                      withObject:nil 
                      afterDelay:0.1];  

然后您可以使用取消命令,如

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

然后你的scrollToBottom:被调用的唯一时间是它没有被取消(所以,最后一次被取消)。现在你不需要计时器了。

答案 1 :(得分:0)

不是一个确切的解决方案,但可以指导正确的方向。您可以在.h文件中设置一个标志,并使用它来确定该方法是否已被调用。

init方法设置标记为,

self.didCallScrollToBottomMethod = FALSE;

scrollToBottomMethod中,将条件检查为,

if (!self.didCallScrollToBottomMethod) {
   self.didCallScrollToBottomMethod = TRUE;
   //set the timer here to scroll after 0.1 seconds
}

在滚动完成后,在计时器方法中,将标记设置为

self.didCallScrollToBottomMethod = FALSE;