我已經成功地動畫了我的圖層的位置和變換(旋轉)。動畫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值應爲正是在兩個可可和可可觸摸你是不是要去一樣。
如果我可能會對您的代碼本身發表評論,它很好,很乾淨 –
謝謝@JamesGraham!我主要與那些在編碼時看不到這種藝術價值的開發者合作:/ – Mazyod
閱讀:)是一種快樂:) –