2011-12-05 71 views
0

我有一個全局變量p。 我有一個函數根據這個全局變量的值繪製(或重繪)我複雜的UIView對象。 當我增加p時,我的uiview對象需要重繪。我需要使用動畫來完成。動畫ios objective-c

double pInitialValue=0.5; 
double pNewValue=1.0; 

//somewhere before animation we must call [self redraw] to draw our view with p=pInitialValue; 

//then, when we call animate function. 
//we change p to pNewValue 
//and every step must be redrawed using [self redraw] 

p=pNewValue; //using animation p must slowly grow from pInitialValue to pNewValue 
[self redraw]; //and ofcourse user must see every step of animation so we need to call redraw function 

比如我需要時間4 動畫這意味着,這家4秒鐘內我的p必須從pInitialValue增長到pNewValue,並在每一步我重繪函數必須被調用

幫幫我,請。如何做呢?

+0

您是否聽說過標準UIView動畫?他們只需幾行代碼即可完成所有任務。 –

回答

1

您可以使用計時器來增加您的p值。是這樣做的:都在你的類的實例變量定義如下

NSTimer *timer; 

之後,你希望你的動畫發生做之前:

CGFloat timerInterval = 1/30; // This means 30 frames per second. Change this as you want. 
timer = [NSTimer scheduledTimerWithTimeInterval:timerInterval target:self selector:@selector(increaseP) userInfo:nil repeats:YES]; 

比有一個叫increaseP這樣的方法:

- (void)increaseP 
{ 
    if (p < maxPValue) { 
     // Increase p here and redraw your things 
    } 
    else { 
     [timer invalidate]; 
    } 
} 

讓我知道你是否有任何問題,如果這對你有用。

+0

一切工作正常。但是這使我的觀點的旋轉線性生動。如何將它像UIViewAnimatinCurveEaseIn一樣動畫化? – Oleg

+1

我很高興它有幫助。不幸的是,我不認爲我可以幫助你,因爲我不知道如何以非線性方式增加pValue。你應該問另外一個問題,以便能夠從其他人那裏獲得幫助。乾杯! –