2012-07-22 42 views
0

我正在嘗試使用通常的UIView類方法來動畫一些東西。我使用流行的iCarousel庫調用這些動畫方法。當我滾動旋轉木馬時,動畫立即進入完成狀態並調用完成功能(忽略動畫的持續時間)。 finished布爾值爲true,所以看起來不像動畫被中斷。核心動畫立即調用完成函數

當我在iCarousel的委託方法之外觸發這些動畫時,它們可以工作。我不打算修理iCarousel,也不會認爲它有什麼問題。我更加好奇,裏面的代碼可能會導致我的動畫立即完成。我能做些什麼來避免這個問題。

下面是一個例子:

- (void)carouselCurrentItemIndexDidChange:(iCarousel *)carousel { 
    [UIView 
    animateWithDuration:5.0f 
    delay:0 
    options: 
     UIViewAnimationOptionCurveEaseOut | 
     UIViewAnimationOptionOverrideInheritedDuration | 
     UIViewAnimationOptionOverrideInheritedCurve 
    animations:^{ 
     myView.alpha = 0; 
    } 
    completion:^(BOOL finished){ 
     NSLog(@"Completed. Did it finish? %i", finished); 
    }]; 
} 

最後的細節:
iCarousel的文件中提到,您可以更改輪轉的useDisplayLink財產,以避免與動畫的一些衝突。這似乎沒有任何區別。

在此先感謝您的幫助!

回答

2

我在iCarousel的源代碼中發現了這個問題。出於某種原因在他們的庫中,他們使用[CATransaction setDisableActions:YES];禁用動畫,然後在一堆不同的地方重新啓用它。其中一個這樣的地方跨過了一堆回調,這阻止了我的動畫正常開火。

通過iCarousel代碼判斷,這是非常有意的,所以我想我必須在自己的代碼中解決這個問題。

編輯:這是我更新的代碼,避免此問題:

- (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel { 
    BOOL previousDisableActions = [CATransaction disableActions]; 
    [CATransaction setDisableActions:NO]; 

    // Begin animation here. 

    [CATransaction setDisableActions:previousDisableActions]; 
} 

更新: iCarousel筆者通過內部加入我上面圍繞各代表呼籲建議的代碼已經修復了這個漏洞。看起來這是固定好的。