Как я прочитал здесь, в Apple документация, я могу анимировать свойство «центр» UIView.
Для этого я использую CAKeyframeAnimation и предоставляю этой анимации три ключевых кадра и три CGPoints.
Анимация вроде не работает. Я делаю что-то не так здесь?
NSMutableArray* values = [NSMutableArray new];
[values addObject:@(CGPointMake(0, 0))];
[values addObject:@(CGPointMake(5, 8))];
[values addObject:@(CGPointMake(10, 8))];
NSMutableArray* keyTimes = [NSMutableArray new];
[keyTimes addObject:@(0)];
[keyTimes addObject:@(0.5)];
[keyTimes addObject:@(1)];
NSMutableArray* timingFunctions = [NSMutableArray new];
[timingFunctions addObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[timingFunctions addObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
CAKeyframeAnimation* myAimation = [CAKeyframeAnimation animationWithKeyPath:@"center"];
myAimation.duration = 0.5;
myAimation.values = values;
myAimation.timingFunctions = timingFunctions;
myAimation.keyTimes = keyTimes;
[myView.layer addAnimation:myAimation forKey:nil];





Попробуйте изменить keypath с "center" на "position" Мой быстрый код работает с этим
func animate() {
var values: [AnyHashable] = []
values.append(NSValue(cgPoint: CGPoint(x: 0, y: 0)))
values.append(NSValue(cgPoint: CGPoint(x: 200, y: 140)))
values.append(NSValue(cgPoint: CGPoint(x: 140, y: 200)))
var keyTimes: [NSNumber] = []
keyTimes.append(NSNumber(value: 0))
keyTimes.append(NSNumber(value: 0.5))
keyTimes.append(NSNumber(value: 1))
var timingFunctions: [AnyHashable] = []
timingFunctions.append(CAMediaTimingFunction(name: .easeOut))
timingFunctions.append(CAMediaTimingFunction(name: .easeInEaseOut))
let myAimation = CAKeyframeAnimation(keyPath: "position")
myAimation.duration = 0.5
myAimation.values = values
myAimation.timingFunctions = timingFunctions as? [CAMediaTimingFunction]
myAimation.keyTimes = keyTimes
myView.layer.add(myAimation, forKey: nil)
}
Center пишется, чтобы сказать, что мы можем перемещать объект, просто меняя центр без изменения его рамки, начала координат или границ. Для анимации мы должны использовать «позицию» в качестве пути.
Это не сработает, потому что center не является собственностью CALayer.
Вы можете проверить полный список из этот ответ
Вы также можете прочитать это на сайте Apple: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreAnimation_guide/AnimatableProperties/AnimatableProperties.html#//apple_ref/doc/uid/TP40004514-CH11-SW1
попробуй [CAKeyframeAnimation animationWithKeyPath:@"position.x"];.
Спасибо за подсказку! Попробую
position. Но почемуcenterупоминается в документации?