2014-02-07 64 views
0

我想動畫不受animateWithDuration:animations:支持,不能由一個過渡動畫效果的UI元素。手冊動畫非動畫UI元素

我想到的第一件事是做這樣的事情:

_animationStartDate = [NSDate date]; 
[self performSelector:@selector(manualAnimation) withObject:nil afterDelay:1.0/MYManualAnimationFrameRate]; 

- (void)manualAnimation 
{ 
    NSDate *now = [NSDate date]; 
    NSTimeInterval interval = [now timeIntervalSinceDate:_animationStartDate]; 
    CGFloat progress = interval/MYManualAnimationDuration; 
    if (progress < 1) 
    { 
     [self setValuesOfManualAnimationAtProgress:progress]; 
     [self performSelector:@selector(manualAnimation:) withObject:number afterDelay:1.0/MYManualAnimationFrameRate]; 
    } else { 
     [self setValuesOfManualAnimationAtProgress:1]; 
    } 
} 

之前重新發明輪子,有沒有爲這些類型的動畫中的任何API?

如果不是,我應該考慮的其他事項(例如,在dealloc中調用cancelPreviousPerformRequestsWithTarget:selector:object:,動態幀速率)?我會通過使用GCD獲得什麼?

+1

如果你想知道,我的動畫'NSTextAttachment'性能。 – hpique

+0

如果您打算做這樣的手動動畫,請使用CADisplayLink。 –

+1

@DavidRönnqvistD'oh。隨意發佈它作爲答案。 – hpique

回答

2

之前重新發明輪子,有沒有爲這些類型的動畫中的任何API?

這將是CADisplayLink這「是一個計時器對象,它允許您的應用程序的繪圖同步到顯示器的刷新頻率」

你使用它時,它的時間來調用一個選擇與此簽名重繪

- (void) selector:(CADisplayLink *)sender; 

在你的繪製代碼,你可以使用顯示鏈接的timestamp知道如何遠成動畫繪製。