2012-10-10 20 views
0

標題說多個按鈕按下,但實際上我正在尋找堆疊多個事件。我有一個聊天應用程序,可以一次接收許多聊天消息。在我的messageReceived函數中,我想滾動到最近聊天的底部。我遇到的問題是有時候很多消息(50+)可以同時進入。我已經確定,滾動到底部是一個巨大的性能瓶頸,如果執行50次,但是如果僅在收到消息後才執行,則效果很好。多個按鈕導致在ios可可中的單個動作

我想要在我的messageReceived函數中延遲0.1秒後滾動到底部。但是我希望在0.1秒內發生的所有新聊天消息都可以「堆疊」,並且只發出一次滾動至底部請求。

我認爲一個設置和取消定時器的系統可以解決這個問題,但我無法做到。有沒有更好的方法來實現這一點!謝謝!

回答

1

如果您正在設置延遲「滾動與類似

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

則下方的」請求您可以使用取消命令狀

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

那麼唯一一次你scrollToBottom:被稱爲是當它不被取消(這樣,上次在一堆)。現在你不需要計時器。

+0

這個很好用! – portforwardpodcast

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; 
相關問題