2013-03-28 67 views
2

我正在使用[UIView animateWithDuration ...]爲了顯示我的應用程序的每個頁面的文本。每個頁面都有自己的文字。我在頁面間滑動瀏覽。我在顯示頁面後使用1秒溶解效果使文本消失。如何在完成之前中斷UIView動畫?

下面是問題:如果我在1秒內(在此期間文本正在淡入)中滑動,則會在下一頁出現並且2個文本重疊(前一個和當前)時完成動畫。

我想要實現的解決方案是中斷動畫,如果我碰巧在其發生時刷卡。我無法做到這一點。 [self.view.layer removeAllAnimations];不適合我。

這裏是我的動畫代碼:

- (void) replaceContent: (UITextView *) theCurrentContent withContent: (UITextView *) theReplacementContent { 

    theReplacementContent.alpha = 0.0; 
    [self.view addSubview: theReplacementContent]; 


    theReplacementContent.alpha = 0.0; 

    [UITextView animateWithDuration: 1.0 
           delay: 0.0 
          options: UIViewAnimationOptionTransitionCrossDissolve 
         animations: ^{ 
          theCurrentContent.alpha = 0.0; 
          theReplacementContent.alpha = 1.0; 
         } 
         completion: ^(BOOL finished){ 
          [theCurrentContent removeFromSuperview]; 
          self.currentContent = theReplacementContent; 
          [self.view bringSubviewToFront:theReplacementContent]; 
         }]; 

    } 

你們是否知道如何使這項工作?你知道解決這個問題的其他方法嗎?

+0

可能重複[取消UIView動畫?](http://stackoverflow.com/questions/554997/cancel-a-uiview-animation) – matt

+0

你嘗試發送'removeAllAnimations'到'CurrentContent.layer'和' theReplacementContent.layer'? –

+0

@matt,雖然 – Armand

回答

2

因此,另一種可能的解決方案是在動畫期間禁用交互。

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
0

我會聲明一個像shouldAllowContentToBeReplaced這樣的標誌。當動畫開始時將其設置爲false,並在完成時將其設置爲true。然後在開始動畫之前說出if (shouldAllowContentToBeReplaced) {

11

您不能直接取消通過+animateWithDuration...創建的動畫。你想要做的是替換即時新的運行動畫。

- (void)showNextPage 
{ 
    //skip the running animation, if the animation is already finished, it does nothing 
    [UIView animateWithDuration: 0.0 
          delay: 0.0 
         options: UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionBeginFromCurrentState 
        animations: ^{ 
         theCurrentContent.alpha = 1.0; 
         theReplacementContent.alpha = 0.0; 
        } 
        completion: ^(BOOL finished){ 
         theReplacementContent = ... // set the view for you next page 
         [self replaceContent:theCurrentContent withContent:theReplacementContent]; 
        }]; 
} 

注意附加UIViewAnimationOptionBeginFromCurrentState傳遞給options:

當你想顯示下一個頁面你可以寫下面的方法,即獲得被稱爲。這是做的,它基本上告訴框架攔截所有受影響的屬性的運行動畫,並用它替換它們。 通過將duration:設置爲0.0新值立即設置。

completion:塊中,您可以創建並設置新內容,並調用replaceContent:withContent:方法。

+0

仍然有點不同。它並沒有完全解決這個問題,但我懷疑我可能會做出一些錯誤的修改你的代碼。 – Armand

+0

非常感謝你爲這些行:-) – Armand