Я использую CAKeyframeAnimation для перемещения CALayer по траектории круга. Иногда мне нужно остановить анимацию и переместить анимацию в точку остановки анимации. Здесь код:CAKeyFrameАнимация уровня представления кажется не изменяться
CAKeyframeAnimation* circlePathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
CGMutablePathRef circularPath = the circle path;
circlePathAnimation.path = circularPath;
circlePathAnimation.delegate = self;
circlePathAnimation.duration = 3.0f;
circlePathAnimation.repeatCount = 1;
circlePathAnimation.fillMode = kCAFillModeForwards;
circlePathAnimation.removedOnCompletion = NO;
circlePathAnimation.timingFunction = [CAMediaTimingFunction functionWithControlPoints:.43 :.78 :.69 :.99];
[circlePathAnimation setValue:layer forKey:@"animationLayer"];
[layer addAnimation:circlePathAnimation forKey:@"Rotation"];
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
CALayer *layer = [anim valueForKey:@"animationLayer"];
if (layer) {
CALayer *presentationLayer = layer.presentationLayer;
layer.position = presentationLayer.position;
}
}
Но слой презентации не имеет изменений в положении !!! Я читал, что он больше не надежен от ios 8. Так есть ли другой способ найти текущую позицию анимированного слоя?
Я получил положение (на самом деле, frame.origin) анимационных объектов, используя слой представления в iOS 8, и, похоже, он работал нормально. Можете ли вы предоставить ссылку на то, где вы читаете, что она более не надежна? Я тестировал его с помощью presentationLayer.position, и это тоже сработало. – rdelmar