2014-11-24 120 views
0

我有一個UIView稱爲,它有一個很好的無盡的「浮動」動畫的iOS添加第二個動畫已經動畫的UIView

[UIView animateWithDuration:1 
         delay:0 
        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 

        CGPoint center = waves.center; 
        center.y += 5; 
        waves.center = center; 

       } 
       completion:nil]; 

現在,如果我添加其他動畫,說提出這個觀點的不同位置,「浮動」動畫停止。這是一個合理的反應,在完成塊中再次啓動「浮動」是沒有問題的。我只是想知道如果我錯過了某些東西,或許在動畫選項中,將兩者結合起來,不會相互打斷。

我能這樣做,如果第二動畫是基於CGAffineTransfromScale,他們結合沒有問題,但是當我移動視圖的中心是不是這樣的。

UPDATE:發現了一個bug性能。我有一個按鈕,調用負責使用動畫移動視圖中心的方法。如果在上一個動畫完成之前按下它太快,View只會捕捉到新的位置而沒有動畫,並且不會調用完成塊。以下是該方法的代碼:

- (void)wavesAnimationReversed:(BOOL)reversed { 

    CGFloat y = waves.frame.size.height*0.25; 
    y = reversed ? -y : y; 
    // CGFloat damping = reversed ? 1 : 0.65; 
    CGFloat damping = 1;  

    [UIView animateWithDuration:kWAVES_ANIMATION_DURATION 
          delay:0 
     usingSpringWithDamping:damping 
      initialSpringVelocity:0 
         options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 

         CGPoint center = waves.center; 
         center.y += y; 
         waves.center = center; 

        } 
        completion:^(BOOL finished) { 
         [self handleStartWavesFloating]; 
        }]; 
} 
+0

怎麼樣'UIViewAnimationOptionBeginFromCurrentState'標誌? – 2014-11-24 12:35:24

+0

@GuyKogus不,不會做的伎倆 – NKorotkov 2014-11-24 12:55:47

+0

關於你提到的更新,如果你不希望發生的卡,然後檢查是否'finished'是真實的(或'YES',相當)。另外,如果對變換進行動畫處理,那麼爲什麼不嘗試在動畫塊中使用'CGAffineTransfromTranslate'? – 2014-11-24 14:05:09

回答

0

如果要執行多個動畫,則應使用animateKeyFrames。 這就是說,你不能動畫正在動畫的東西(你的描述完全匹配會發生什麼)。也就是說,因爲視圖中的值已經被更改(它是真實值),所以動畫發生在您的控制之外。

因此,如果您創建一個新的動畫,默認值是您的第一個動畫的最終值時,第二個動畫觸發器,它會自動在視圖中移動到新的位置開始第二動畫。

+0

我相信這是正確的,你可以結合縮放和移動動畫的唯一原因是它們改變了對象框架的不同屬性。 – NKorotkov 2014-11-27 10:40:10

+0

@NKorotkov這是真的,但如果你這樣做,你在同一個UIView動畫塊內。 – wolffan 2014-11-27 12:28:59