0

我将首先解释说我已经看到了很多关于此类功能的问题和答案,但我自己在实现它时仍然遇到问题。我正在使用 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 定义不正确?

4

1 回答 1

0

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

[self performSelector:@selector(hideDetailView) withObject:nil afterDelay:.40];
于 2013-09-30T15:13:35.880 回答