我将首先解释说我已经看到了很多有关此类功能的问题和答案,但我自己仍然遇到问题。我正在使用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错误定义了吗?
答案 0 :(得分:0)
在动画开始之前调用detailView.hidden。我通过添加一个带有延迟的选择器来解决这个问题,该延迟包含隐藏视图的方法。
[self performSelector:@selector(hideDetailView) withObject:nil afterDelay:.40];