使用Slide In&为子视图滑出动画

时间:2013-08-20 14:27:33

标签: ipad animation uiview subview uiviewanimation

我将首先解释说我已经看到了很多有关此类功能的问题和答案,但我自己仍然遇到问题。我正在使用ARC,并没有使用自动布局或故事板。我在代码中使用约束来定义我的布局,所以我尝试实现动画的方式有点不同。最后,这是一个iPad应用程序。

对于手头的具体问题,我有一个从隐藏开始的子视图,但在动作发生时会出现。我希望这个子视图使用隐藏的功能,但在它出现之后和隐藏之前滑入和滑出。到目前为止,我已经到了一半,能够让视图无问题地滑入。下面是完成此任务的代码。

    detailView.hidden = NO;

// Perform Animation - Slide In
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
    animation.duration = kAnimationTimeout;
    animation.removedOnCompletion = NO;
    animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(800.0, 0.0, 1.0)];
    [detailView.layer addAnimation:animation forKey:nil];

但是,我在尝试让视图在隐藏之前滑出时失败了。以下是我为尝试完成此功能而添加的代码。

// Perform Animation - Slide Out
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
    animation.duration = kAnimationTimeout;
    animation.removedOnCompletion = NO;
    animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-800.0, 0.0, 1.0)];
    [detailView.layer addAnimation:animation forKey:nil];

    detailView.hidden = YES;

我得到的结果是视图就像它被隐藏一样消失,它总是这样。在添加不同的动画之前,是否需要删除添加到视图中的一个动画?或者我的CATransform3DMakeTranslation错误定义了吗?

1 个答案:

答案 0 :(得分:0)

在动画开始之前调用detailView.hidden。我通过添加一个带有延迟的选择器来解决这个问题,该延迟包含隐藏视图的方法。

[self performSelector:@selector(hideDetailView) withObject:nil afterDelay:.40];