簡體   English   中英

在“相同”時間發送30個對象的最簡單,最快的方法是什么?

[英]What's the easiest and fastest way of messaging 30 objects at the “same” time?

我有一個UIScrollView,在滾動過程中會出現很多對象(UIImageView的)。 但是,當用戶滾動時,我想向所有這些對象發射消息,以告訴他們它們不會做任何愚蠢的事情。 當UIScrollView減速時,可見對象處會發生一些動畫。 當用戶快速移動時(pagingEnabled = YES),越來越多的對象仍在設置動畫,這將導致可怕的滾動性能。

我想告訴他們所有人立即停止,並且在用戶滾動時什么也不做。 那么,我該怎么辦? for循環不利於滾動時的性能。 一會兒會發呆,但這足以使用戶非常生氣。

將它們全部放入一個數組中,然后使用[NSArray makeObjectsPerformSelector:]。 這是最簡潔的方法,但是我不確定它是否比使用for循環更有效...

我不確定您如何為視圖設置動畫,但是您可能想使用UIScrollView的委托函數來維護可見項的子數組,並將動畫限制為這些項。 例如,每當可見矩形發生變化時,您都可以查看現有的可見視圖列表,並查看是否完全在屏幕外。 您可以停止為這些動畫。 然后,您可以在屏幕上查找但不在列表中的視圖,並在其上開始制作動畫。 我以前做過這樣的事情,它大大提高了性能!

然后,如果您想凍結所有正在運行的動畫,則需要設置一系列動畫,並且動畫相對較短。

希望有幫助!

還要記住,計算機只能以線性方式進行操作。 因此,無論您做什么,都必須使用某種循環控制結構。

也許開始一個包含循環的線程。 然后循環將調用

perfomrselectoronmainthread:

每個對象的選擇器。 (記住UI內容,它必須在主線程上執行。)

我想你正在使用

+ (void)setAnimationsEnabled:(BOOL)enabled

停止動畫。

如果這還不夠快,則您必須查看Core Animations,它們將具有額外的效率,可以實現這一目標。

我會使用通知。 這樣的好處是您可以通知所有對象,並向它們傳遞所有必需的信息。 這也是一種簡單但功能強大的機制,允許異步通信。

請參閱通知編程主題簡介:

http://developer.apple.com/documentation/Cocoa/Conceptual/Notifications/Introduction/introNotifications.html

嘗試在不同的線程上執行每條消息。 當然,所有UI更新都必須在主線程上,但是如果您可以在后台線程中做一些工作,也許會減少一些滯后。 (但是我不能說這對於30多個對象是多么可行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM