2010-03-14 106 views
2

我是iPhone新手,並且在Core Animation上做了一些實驗。我遇到了一個關於我正在嘗試的動畫持續時間的小問題。iPhone上的核心動畫問題

基本上,我得到了兩個子視圖的視圖,並且我試圖使它們的不透明度變成動畫,以便一個淡入淡出。問題在於,子視圖不是逐漸淡入/淡出,而是立即切換到全/零不透明狀態。我試圖用CATransaction調整動畫的持續時間,沒有什麼不可知的效果。這也不是特定的動畫不透明 - 動畫位置顯示相同的問題。

我正在使用的代碼(內上海華盈的方法)如下:

CALayer* oldLayer = ((UIView*) [[self subviews] objectAtIndex:0]).layer; 
CALayer* newLayer = ((UIView*) [[self subviews] objectAtIndex:1]).layer; 

[CATransaction begin]; 
[CATransaction setAnimationDuration:1.0f]; 
oldLayer.opacity = 0.0; 
newLayer.opacity = 1.0; 
[CATransaction commit]; 

有沒有人有一個想法,這個問題可能是什麼?

回答

4

是否有一個原因,你使用核心動畫通用UIView動畫包裝?這是非常簡單的做這樣的事情

UIView *oldView = [[self subviews] objectAtIndex:0]; 
UIView *newView = [[self subviews] objectAtIndex:1]; 

[UIView beginAnimations:@"swapViews" context:nil]; 
[UIView setAnimationDuration:1]; 
    oldView.alpha = 0; 
    newView.alpha = 1; 
[UIView commitAnimations]; 
+1

真的很好的問題!我有一種感覺,有一個原因,但如果有的話,我似乎無法回想起來。可能與我在哪裏完成整個想法有關。我會盡你所能去看看會發生什麼。謝謝! – Mac 2010-03-14 23:43:47

+1

這個伎倆!現在我會保持這種狀態,但是如果我知道爲什麼我會這樣做,並決定切換回來,我可能會回頭再挑選一些你的頭腦。 :-) 謝謝! – Mac 2010-03-14 23:47:46

2

您是否需要在此處使用顯式的CATransaction?

該文檔here意味着你不知道。

+0

我的第一個原型使用了隱式動畫,但是當我第一次觀察到這個問題時,我想它可能值得嘗試一個明確的動畫以防止這種情況得到幫助。我想現在我知道它並不能幫助我把它拿出來,但我只是認爲最好現在就發佈我現在的東西,以防萬一。不過謝謝。 – Mac 2010-03-14 23:42:24

18

諾亞的解決方案是最乾淨的方式來做你想做的事情,但你沒有看到動畫的原因是,隱式動畫被禁用爲支持UIViews的CALayers。由於沒有任何動畫,CATransaction無法設置任何事件的持續時間。

如果你真的想要的層上執行此動畫,你需要建立一個手動CABasicAnimation做到這一點:

CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
opacityAnimation.removedOnCompletion = NO; 
opacityAnimation.fillMode = kCAFillModeForwards; 

[oldLayer addAnimation:opacityAnimation forKey:@"opacity"]; 
[newLayer addAnimation:opacityAnimation forKey:@"opacity"]; 

[CATransaction begin]; 
[CATransaction setAnimationDuration:1.0f]; 
oldLayer.opacity = 0.0; 
newLayer.opacity = 1.0; 
[CATransaction commit]; 

(請注意,我不知道你是否能重新你可能需要爲每一層創建不同的實例)

+0

我希望我能雙倍投票。知道這非常有用。謝謝。 – 2010-03-15 03:52:59

+0

我非常同意諾亞 - 非常感謝!這解釋了很多,也許正是我需要進一步追蹤的東西。 @Noah - 我會代表你爲你代勞Brad – Mac 2010-03-15 04:45:09