2010-12-16 93 views
0

對於實驗我有一個UIViewController和一個截取觸摸事件的自定義窗口,這樣我可以在屏幕上拖動和滑動不同的UIViews。我處理的事件類型有3種:UITouchPhaseBegan和UITouchPhaseMoving(其中我簡單地根據觸摸座標移動子UIView)和UITouchPhaseEnded(其中我向UIView施加一個力讓它在屏幕上移動,放慢速度摩擦)。UIScrollView如何在滾動/抖動的情況下滾動得如此之好?

我計算結束觸摸事件時應用的力的方法是通過計算最後(來自UITouchPhaseMoving)和當前(來自UITouchPhaseEnded)觸摸位置之間的方向矢量,但它似乎並沒有給我我想要的結果。

當我移動視圖並平穩地將手指從屏幕上擡起時,它會很好地移動,但是當我「移動」到最後時,它移動的距離並不像預期的那麼遠。這是因爲即使我將它在屏幕上移動了幾幀,最後的跳動使得最後和當前觸摸事件的座標太接近,所以我沒有計算出全力。

對不起長文本,但我注意到像UIScrollView這樣的視圖仍然可以正確滾動,即使是這種乾的/閃爍的運動;這是因爲最終的力量是在多個幀上計算的,而不是僅僅是最後一幀和當前幀?如果是這樣,是否有人知道滾動視圖的內部工作原理,即使是輕快/抖動的運動,它也能夠很好地工作?

回答

1

我不知道內部工作原理, ,但懷疑它通過記下觸點座標和時間以及釋放座標和時間來計算力矢量。一旦發生這種情況,對其進行減速,以獲得慣性。我認爲這可能是一件非常難以正確的事情,而且蘋果已經花了很長時間對此進行了微調,甚至在達到其界限時反彈速度也很快。絕對是一個有趣的實驗。