2012-10-22 112 views
1

我正在使用[UIView animateWithDuration:...]獲得動畫序列UIImageView的意見。像這樣:完成之前開始動畫UIView?

[UIView animateWithDuration:1.0 animations:^{ 
    imageView.frame = newImageRectPosition; 
}completion:^(BOOL finished){ 
//animate next UIImageView 
}]; 

我需要動畫「下一個UIImageView」沒有完成。我需要在前一個動畫的中間動畫'next UIImageView',而不是完成。是否有可能這樣做?

+1

開始另一個動畫與0.5秒 – Felix

+0

相關的延遲:http://stackoverflow.com/a/27609589/870028 – Johnny

回答

2

您可以創建了兩個UIView的動畫塊,一個具有第一動畫的1/2時間的延遲:

[UIView animateWithDuration:1.0 
       animations:^{ ... } 
       completion:^(BOOL finished){ ... } 
]; 

[UIView animateWithDuration:1.0 
         delay:0.5 
        options:UIViewAnimationCurveLinear 
       animations:^{ ... } 
       completion:^(BOOL finished) { ... } 
]; 
+1

感謝,工作 –

+0

這樣的工作,但是,我認爲,使用animateKeyframesWithDuration是一個更好的辦法。 – Johnny

0

有你可以用它來實現你後的效果很多選擇。想到的一點是定時器的使用。

使用一個NSTimer,其間隔爲動畫的一半,並讓計時器觸發另一個動畫。只要這兩個動畫不會互相干擾,你應該沒問題。

一個例子是像這樣:

NSTimer* timer; 
// Modify to your uses if so required (i.e. repeating, more than 2 animations etc...) 
timer = [NSTimer scheduledTimerWithTimeInterval:animationTime/2 target:self selector:@selector(runAnimation) userInfo:nil repeats:NO]; 

[UIView animateWithDuration:animationTime animations:^{ 
    imageView.frame = newImageRectPosition; 
} completion:nil]; 

- (void)runAnimation 
{ 
    // 2nd animation required 
    [UIView animateWithDuration:animationTime animations:^{ 
     imageView.frame = newImageRectPosition; 
    } completion:nil]; 
} 

具有定時功能,這可能擴大,如果你需要做兩個以上的動畫,而這一切都粘在一起如果以後需要改變動畫時間上。

+0

對於接受「延遲」的動畫塊使用NSTimer似乎有點愚蠢。只是延遲使用視圖動畫... – runmad

+0

取決於情況;假設你有n個需要運行的動畫。通過延遲指定動畫,您必須同時提交所有動畫,而這對於大量的n來說可能是一個後勤噩夢,具體取決於動畫時間和它們各自的延遲。 使用定時器,您可以在需要時提交動畫。讓計時器定期重複提交動畫塊,可以更輕鬆地管理時間和延遲。 我同意,在這種情況下,只有2個動畫塊,延遲將是最簡單和最合適的。 – WDUK

+0

我同意你給出的例子:) – runmad

相關問題