2016-05-14 52 views
0

我試圖以圓形方式圍繞矩形創建點。 爲此,我創建了一個橢圓UIBezierPath,創建了一個CAKeyFrameAnimation併爲keyPath'position'設置路徑。CAKeyFrameAnimation在使用CGPath時沒有動畫效果

我設置了一個項目來試驗動畫並獲得了很好的效果。 問題是,當我將代碼添加到我的應用程序中時,點不是動畫。 我試圖添加相同的代碼到其他應用程序,它工作得很好。它不適用於那一個應用程序。

奇怪的是,如果我通過包含CGPoint的值的數組替換路徑,那麼點動畫。它只是不適用於CGPath的特定應用程序。

是否有隱藏的設置某處阻止CAKeyFrameAnimation使用CGPath? 還有另一種方法可以做到嗎?使用值不像曲線那樣曲線很好。

這裏是我以前沒有什麼幫助的代碼:

CAKeyframeAnimation *orbit = [CAKeyframeAnimation animation]; 
orbit.keyPath = @"position"; 
orbit.path = [self foregroundArcPath].CGPath; 
orbit.duration = 0.7f; 
orbit.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
orbit.repeatCount = HUGE_VALF; 
orbit.calculationMode = kCAAnimationPaced; 
[self.foregroundDot addAnimation:orbit forKey:@"orbit"]; 

就像我說的,此代碼的工作,只是沒有在這一個應用程序。 這是我在這裏的第一篇文章,對不起,如果它配製不好。

回答

0

也許foregroundArcPath是零還是空路徑?

我很抱歉給出一個小細節的答案。我會剛剛發表評論,但我還沒有能夠做到這一點。

+0

路徑很好,我驗證了很多次。我甚至嘗試過其他路徑和其他圖層。另外,當我將其添加到其他項目時,該代碼也可以工作看起來問題在於這個項目。某些東西必須關閉路徑上的層動畫,或者它是Apple的錯誤,我真的不知道。 –

+0

這看起來很奇怪,如果沒有經過該項目的其餘代碼,就很難指出問題所在,否則就會出現bug。我唯一能想到的其他問題是foregroundDot是否支持視圖?因爲那麼你需要在動畫塊內部調用它來工作。如果它只是一個獨立的層,那麼我不知道。 – dunkmann00

+0

foregroundDot是一個CAShapeLayer,作爲我在屏幕上顯示的視圖的子圖層添加。動畫的子層的位置應該沒問題。正如你所看到的,無論如何它都是在動畫塊中調用的。 –

0

我遇到了和你一樣的問題。也許你的項目導入了一些NSObject覆蓋類,比如RMMapper。

-(instancetype)copyWithZone:(NSZone *)zone { 
     typeof(self) copiedObj = [[[self class] allocWithZone:zone] init]; 

CGPath不適合複製區域。

希望這篇技巧能幫助你。

相關問題