0

我在我的项目中使用自动布局,并在按下按钮时在“平铺视图”上滑动“详细视图”。

“平铺视图”与顶部、底部、左侧和右侧对齐。“详细视图”与中心 x、y 对齐且宽度/高度相等。

我让动画工作,但我不得不使用两种不同的方法:

1)这是我首选的动画方法,在“平铺视图”上效果很好

CAKeyframeAnimation* tileKeyAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
tileKeyAnimation.fillMode = kCAFillModeForwards;
tileKeyAnimation.removedOnCompletion = NO;
tileKeyAnimation.keyTimes = @[@0,@0.45];
tileKeyAnimation.values   = @[[NSValue valueWithCATransform3D:CATransform3DIdentity],
                              [NSValue valueWithCATransform3D:self.tileTransform]];
tileKeyAnimation.duration = 0.5;
[_tileView.layer addAnimation:tileKeyAnimation forKey:@"transform"];

2) 由于上述动画不适用于“详细视图”,因此我使用了不同类型的动画。(我为 centerX 约束创建了一个出口,名为 _detailedCenterXConstraint)

_detailedCenterXConstraint.constant = _tileView.bounds.size.width;

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
    [context setTimingFunction:[[CAMediaTimingFunction alloc] initWithControlPoints:0 :0 :0 :0.45]];
    [context setDuration:[self pushAnimationDuration]];
    [_detailedCenterXConstraint.animator setConstant:_detailedView.bounds.size.width];
} completionHandler:^{
}];

这种方法的问题是动画彼此不匹配。我尝试在 (2) 中使用自定义 CAMediaTimingFunction 来匹配 (1) 中的动画时间,但似乎我没有正确使用它。

CAKeyframeAnimation (1) 不能在我的“详细视图”上工作是否有原因?

或者有没有办法匹配两种方法之间的动画时间?

4

1 回答 1

0

我设法使用以下代码获得了相同的动画:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
    [context setTimingFunction:0.45 :1.0 :0.45 :1.0];
    [context setDuration:[self pushAnimationDuration]/2];
    [_detailedCenterXConstraint.animator setConstant:_detailedView.bounds.size.width];
} completionHandler:^{
}];
于 2016-06-15T10:16:34.120 回答