Ios 链接层及其子层的动画(子层模型效果超层动画)

Ios 链接层及其子层的动画(子层模型效果超层动画),ios,core-animation,Ios,Core Animation,我正在尝试链接层及其子层的动画。然而,我遇到的问题是,子层动画位置的模型更新在其超层动画期间在视觉上是明显的。下面是我用来链接动画的代码: // Superlayer. CFTimeInterval now = [self.artworkContainer.layer convertTime:CACurrentMediaTime() fromLayer:nil]; CABasicAnimation *slideDown = [CABasicAnimation animationWithKeyP

我正在尝试链接层及其子层的动画。然而,我遇到的问题是,子层动画位置的模型更新在其超层动画期间在视觉上是明显的。下面是我用来链接动画的代码:

// Superlayer. 
CFTimeInterval now = [self.artworkContainer.layer convertTime:CACurrentMediaTime() fromLayer:nil];
CABasicAnimation *slideDown = [CABasicAnimation animationWithKeyPath:@"position"];
slideDown.duration = SLIDE_DOWN_DURATION; //SLIDE_DOWN_DURATION;
slideDown.beginTime = now;
slideDown.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
slideDown.fromValue = [self.artworkContainer.layer valueForKey:@"position"];

CGPoint finalPointOfContainer = CGPointMake(self.artworkContainer.layer.position.x, self.artworkContainer.layer.position.y+verticalDistanceOfFirstFall);
slideDown.toValue = [NSValue valueWithCGPoint:finalPointOfContainer];
self.artworkContainer.layer.position = finalPointOfContainer;
[self.artworkContainer.layer addAnimation:slideDown forKey:@"position"];

// Sublayer 
CABasicAnimation *moveActualArtwork = [CABasicAnimation animationWithKeyPath:@"position"];
moveActualArtwork.duration = timeOfSecondFall;
moveActualArtwork.beginTime = now + SLIDE_DOWN_DURATION;
moveActualArtwork.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
moveActualArtwork.fromValue = [self.artWork.layer valueForKey:@"position"];

CGPoint finalPointOfArtwork = CGPointMake(self.artWork.layer.position.x, self.artWork.layer.position.y+verticalDistanceOfSecondFall);
moveActualArtwork.toValue = [NSValue valueWithCGPoint:finalPointOfArtwork];
self.artWork.layer.position = finalPointOfArtwork; // If this is commented out, the superlayer animation looks correct (of course this isn't a true fix because the sublayer snaps back to its original position without a model update). 

moveActualArtwork.delegate = self;
[self.artWork.layer addAnimation:moveActualArtwork forKey:@"position"];

我在写问题的时候找到了答案。我需要设置第二个动画的fillMode属性:
MoveActualNetwork.fillMode=kCAFillModeBackwards

如果将
fromValue
toValue
视为时间轴上的位置,问题在于,在子层击中时间轴上的
fromValue
点之前,它正在脱离其模型层以确定其位置。通过使用kCAFillModeBackwards,fromValue有效地扩展到覆盖它之前的时间线,以便iOS在动画实际开始之前知道要渲染什么

45:31,我在回顾WWDC 2011视频会议421-核心动画要领时找到了答案