2016-02-05 61 views
1

我只是好奇爲何UIResponder方法返回一組UITouch對象,而不是隻是一個數組爲什麼一套UITouch?

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) 

我不能完全包住我的頭周圍的好處是什麼,或者它背後的目的。希望有人能夠解釋背景中發生的事情,以及最終如何最終得到一套UITouch。例如,如果我要在屏幕上拖動兩根手指,那麼這不就是一個UITouch對象數組嗎?

+0

「爲什麼」的問題往往是基於意見的。特別是,你在問爲什麼蘋果選擇以某種方式設計某種東西,而且他們傾向於不在SO上發佈官方聲明。因此,你不會得到一個權威的答案,社區可以提供的唯一答案是「如果我正在設計它,我會這樣做,因爲......」,這是基於意見的。 – rickster

+0

我必須編輯和改寫,我想我真正要問的是當我得到一組UITouch時究竟發生了什麼 – jhamPac

+0

您的問題對我而言仍然不清楚。該方法通過一組UITouch對象進行調用,該對象表示已移動的觸摸(兩個或多個觸摸點)。觸摸之間沒有*命令*,需要將它們存儲在數組中。 –

回答

2

我們大多數人只能推測爲什麼UIKit報告一組而不是一個數組。

這裏是我的猜測:它強調觸摸不是以任何特定的順序,並且可能不是從一個事件到下一個事件的順序相同。由於SetNSSet沒有下標運算符,因此在處理稍後的事件時很難將存儲觸摸的索引(0,1,2等)用於使用。

它也可能是一個實現細節。 UIKit僅以60 Hz(大多數設備)向您的應用程序報告觸摸事件,並與屏幕刷新同步。如果硬件支持頻率超過60 Hz的報告觸摸事件,則UIKit需要合併多個事件才能進行相同的觸摸操作。從某種意義上說,如果UIKit將更新後的觸摸作爲一組而不是數組來存儲,則會自動進行合併。

1

「Sets」和「Arrays」都是集合對象,所以是的,所有的觸摸都可以在任何一個或字典中返回。究其原因,我想,蘋果選擇了返回一組是雙重的:

  1. 觸摸被獨特。一個數組中的對象可以出現多次,但是他們不能這樣做。由於每次觸摸只有一次觸摸,因此它們在一組中更有意義。
  2. 觸摸是無序。數組中的對象是有序的,而不是它們的集合中的對象。你將如何解決觸摸的順序?或許更早發生過?或者是最左邊的,或者最堅定的,等等......沒有自然的正確秩序,所以它們是無序的,因此最適合一套。