2013-04-23 46 views
0

我已經花了幾個小時今晚試圖獲得兩個UILabels我已經被刷新,因爲一個手勢被識別(基於translation.y和velocity.y)。在UiLabel的減速更新

if (recognizer.state == UIGestureRecognizerStateEnded) 

我想在手勢完成後動畫UILabels刷新的減速。該UILabels只是通過調用

[self refreshLabels]; 

我花了很多時間試圖今晚與慘敗的.contentOffset.y的無限滾動視圖和跟蹤爲此刷新。我還嘗試在上面的if語句中使用for和while循環來創建動畫塊,該動畫塊也不起作用。

有沒有人有任何建議/做過之前呢?

回答

0

如何使用performSelector遞歸調用refreshLabels:withObject:afterDelay:?

當手勢結束時,設置一個私人計數器並調用refreshLabels。在refreshLabels中,使用計數器作爲「時間」變量計算簡單的減速曲線,並將結果值用作下一次遞歸調用的延遲。

示例代碼:

int counter; // Set this value to 1 when the gesture completes 

- (void)refreshLabels:(id)sender{ 
    // Update the labels using whatever code you have 

    // This code will execute the recursive deceleration 
    if (counter > -1){ 
     float somereasonablenumber = 0.1F; 
     float delaytime = (1.0-0.1)/counter; // deceleration = (finaltime-initialtime)/timetaken 
     counter++; 
     if (delaytime > somereasonablenumber){ 
      [self performSelector:@selector(refreshLabels:) withObject:nil afterDelay:delaytime]; 
     } else { 
      counter = -1; 
     } 
    } 

} 

您可能需要用我用finaltime價值觀發揮和initialtime以獲得您想要的曲線。現在,這個代碼會執行延遲曲線,如下所示:

0.9s 
0.45s 
0.3s 
0.225s 
0.18s 
0.15s 
0.128571429s 
0.1125s