2013-04-23 35 views
3

我正在嘗試爲一個圈子中的一些圖標創建一個適用於我的應用程序的菜單。用戶應該能夠旋轉此菜單,使圖標在這個圓形路徑周圍改變位置,但不能自行旋轉。我之前讀過這個http://www.raywenderlich.com/9864/how-to-create-a-rotating-wheel-control-with-uikit,所以我可以看到如何跟隨手指的移動,但是我需要這個菜單在觸摸結束後進行慣性旋轉。我有兩個關於如何做到這一點的問題。如何製作圖標旋轉的菜單?

第一個問題,使圖標在圓圈中移動的最佳方法是什麼?它應該放慢速度直到它停下來,並且如果用戶移動他的手指足夠快,應該能夠做一個以上的整圓。

其次,我該如何測量手指末端的速度?我試圖使用locationInView和previousLocationInView,並通過它們之間的角度差乘以某個常量來旋轉它。問題是,當我將手指放在一個地方一會兒並拿起來時,我仍然會看到這個圓圈的慣性運動,在這種情況下,我根本不希望它移動。

回答

4

您想要使用滾動視圖。具體而言,您需要隱藏的滾動視圖,將滾動視圖中的平移手勢識別器附加到自定義菜單視圖。然後你實現滾動視圖的委託方法來重畫你的菜單。 This WWDC video has a good overview of the process.這種方法的好處是你可以免費獲得真正的iOS風格加速和減速。您不必擔心手指位置或速度,只需滾動視圖的內容偏移。

除非你想旋轉你的手指與菜單項的圓圈。這是一個不同的球類遊戲...

從理論上講,與上面相同的方法可以用於將您的手指旋轉一圈。您需要確保在滾動視圖上將directionalLockEnabled設置爲NO。問題是確定菜單視圖旋轉的計算要複雜得多。可能你會想要模態,並檢查回調中的滾動視圖是否爲dragging。如果正在拖動,則可以使用平移手勢上的觸摸來查找設置旋轉的精確手指位置。您還希望保持手指移動的瞬時方向的數據,以便觸摸釋放時...如果不拖動,則使用滾動視圖內容偏移量來對旋轉應用減速效果(使用在觸摸被釋放之前滾動方向以知道如何使用內容偏移改變)。

+0

是的,那正是我想要做的。 – johnyu 2013-04-25 09:59:11