2012-05-09 143 views
1

我已經成功地動畫了我的圖層的位置和變換(旋轉)。動畫CALayer anchorPoint

現在,我需要對anchorPoint進行動畫處理,但在所有嘗試中都失敗了!我這樣做,即使:

2012... App[6437:403] layer: 1, KeyPath: anchorPoint, fromValue: NSPoint: {1.05, 0.5}, toValue: NSPoint: {1.05, 0.5}, Duration: 2.5 

這是一個NSLog的卡動畫..結果我得到的是該層移動到留在X軸waaaay太遠的圖層,然後回來之前..和重複(因爲自動重新打開)。

關於圖層層次結構的注意事項: SuperLayer具有三個我正在應用動畫的子圖層。

爲什麼?定位點應該如何動畫?

我的代碼:

NSArray* subKeyPath  = [keyPaths objectAtIndex:tag]; 
    NSArray* subToValue  = [toValues objectAtIndex:tag]; 
    NSArray* subDuration = [durations objectAtIndex:tag]; 

    NSEnumerator* keyPathsEnum = [subKeyPath objectEnumerator]; 
    NSEnumerator* toValuesEnum = [subToValue objectEnumerator]; 
    NSEnumerator* durationsEnum = [subDuration objectEnumerator]; 

    NSString* keyPath; 
    NSNumber* toValue; 
    NSNumber* duration; 

    while ((keyPath = [keyPathsEnum nextObject]) && (toValue = [toValuesEnum nextObject]) && (duration = [durationsEnum nextObject])) { 
     CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:keyPath]; 

     id offsetToValue; 
     if ([keyPath hasPrefix:@"position"]) { 
     //I removed the position animation, since animating the anchorPoint should suffice 
     } else if ([keyPath hasPrefix:@"anchorPoint"]) { 
      //This was when I used anchorPoint.x float value   = [[subLayer valueForKeyPath:keyPath] floatValue] - ([toValue floatValue]/[[subLayer contents] size].width); 
      offsetToValue  = [NSNumber valueWithPoint:CGPointMake(1.05, 0.5)]; 
      keyPath    = [keyPath substringToIndex:[keyPath length]-2]; 
     } else { 
      offsetToValue  = toValue; 
     } 

... 

     animation.toValue  = offsetToValue; 
     animation.duration  = [duration floatValue]; 
     animation.fillMode  = kCAFillModeForwards; 
     animation.repeatCount = INFINITY; 
     animation.autoreverses = YES; 
     animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 

     [subLayer addAnimation:animation forKey:keyPath]; 

     //update the model 

    } 

我試圖動畫的 「anchorPoint.x」 的keyPath,相同的結果:(

最後一個音符,我寫一個可可應用程序,但動畫的X值應爲正是在兩個可可和可可觸摸你是不是要去一樣。

+1

如果我可能會對您的代碼本身發表評論,它很好,很乾淨 –

+1

謝謝@JamesGraham!我主要與那些在編碼時看不到這種藝術價值的開發者合作:/ – Mazyod

+0

閱讀:)是一種快樂:) –

回答

2

相信這(好像我跟你從一開始就坐在)..

動畫寶並且旋轉工作正常,沒有設置fromValue。但是,動畫定位點需要我將定位點fromValue設置爲初始值!

animation.fromValue = [subLayer valueForKeyPath:keyPath]; 
+1

這是奇怪的。它幾乎聽起來像一個CA錯誤。您可能希望使用Apple的雷達缺陷跟蹤系統記錄錯誤報告。蘋果通常會迴應,如果它是一個錯誤,它會引起他們的注意,如果不是,你會學到爲什麼它會這樣工作。 –

+0

哇,我從來沒有使用過雷達,從來不知道他們會以這種方式迴應。這絕對值得一試。 – Mazyod