2012-05-28 45 views
1

我有一組滑塊,我使用Value Changed將數字提供給%指標。我也使用這個值來檢查滑塊是否低於某個點。如果是這樣,我想運行一個UIViewAnimation(我是,它都工作正常)。但是,如果滑塊移動到閾值以下,則動畫會不斷調用,這意味着正在動畫的項目從點a移動到點b,然後一遍又一遍地返回。那麼,我只能在閾值點觸發一次動畫嗎?iOS,在滑塊值n處觸發UIViewAnimation一次?

這是我如何得到我的像素值:

_sizeSliderRange = _sizeSlider.frame.size.width - _sizeSlider.currentThumbImage.size.width; 
_sizeSliderOrigin = _sizeSlider.frame.origin.x + (_sizeSlider.currentThumbImage.size.width/4.0); 
_sizeSliderValueToPixels = (_sizeSlider.value * _sizeSliderRange) + _sizeSliderOrigin; 

我使用條件改變IBAction爲功能鏈接的價值裏面checkt他的價值和做的工作:

if (_sizeThumbX < 85) { //if within 60px of the left margin we animate the label to sit float left 
    [UIView transitionWithView:_sizeLabel duration:0.25f options:UIViewAnimationCurveEaseInOut animations:^(void) { etc etc 

謝謝。

+2

只需使用一個標誌來檢查動畫是否已經運行一次。 – Pochi

回答

1

像@Luis說,只使用一個BOOL屬性是這樣的:

if (_sizeThumbX < 85) { //if within 60px of the left margin we animate the label to sit float left 
    if (!self.passedBelowThreshold) { 
     [UIView transitionWithView:_sizeLabel duration:0.25f options:UIViewAnimationCurveEaseInOut animations:^(void) { /* ... */ } 
    } 
} 
self.passedBelowThreshold = _sizeThumbX < 85; 
+0

非常好,謝謝。 – mrEmpty

1

你的代碼是按照你的邏輯是工作每次滑塊值改變,它是低於85的動畫將被調用。你可以有動畫在follwing方式觸發一次: -

1>你可以保持絕對值在該動畫occurs.Something像_sizeThumbX == 85

2>或你canhave多少倍的價值計數器變化 。在不同的函數中計數並存儲滑塊變化的值。如果滑塊值位於85範圍內,則不要增加計數器值,並在動畫部分檢查計數器標誌和滑塊的當前位置(如果滑塊仍在85範圍內)如果計數器值已經是1,則不調用動畫,即動畫已經被觸發,否則調用並增加動畫計數器。

3>我不是你的條件,因爲你沒有清楚地提到,但是如果你想要再次調用動畫,如果你的滑塊超出範圍並再次返回,在這種情況下,使計數爲零(滑塊越過指定的範圍)。

+0

你好。以爲我有這個,但沒有。我正在使用: 'int thumbCount = 0;如果(_sizeThumbX <85){(thumbCount == 0){ thumbCount ++; NSLog(@「Thumb count is:%d」,thumbCount); NSLog (UIView TransitionWithView:_sizeLabel duration:0.5f options:UIViewAnimationCurveEaseInOut animations:^(void){_sizeRightLabel.transform = CGAffineTransformMakeTranslation(_sizeThumbX - 180,0); }完成:^(BOOL finished){}]; }; } else { };' – mrEmpty

+0

我正在使用bool來跟蹤動畫是否已經觸發,日誌顯示bool正在給出我期望的值,但無論如何都會觸發動畫。 – mrEmpty