2016-06-14 78 views
0

我在我的项目中使用了自动布局,并且在按下按钮时在'tile view'上有'详细视图'。使用NSAnimation从外部视图移动NSView并使用自动布局

“平铺视图”与顶部,底部,左侧和右侧对齐。 '详细视图'对齐到中心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 )由于上述动画不适用于“详细视图”,因此我采用了不同类型的动画。 (我创建了一个出口名为_detailedCenterXConstraint的CENTREX约束)

_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)不应该在我的'详细视图'上工作是否有原因?

另一种方法是如何匹配两种方法之间的动画时间?

回答

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:^{ 
}]; 
相关问题