0

我的一个连锁动画中有一个奇怪的问题。我的屏幕上的每个块(其中 26 个)都有块对象,当用户按下它们时,我执行翻转。它工作得很好,但我在做这些之前添加了一个比例动画,以使它们在屏幕上大 50%。所以,我的顺序是:

放大延迟(让用户看到大图像)旋转 90%(从视图中删除块) - 使用 transform.rotation.y 更改图像和旋转收缩。

我已经将窗口视图控制器设置为这些块的代表,这样它就可以将一个计数器传递给这些块,这样我就可以将正确的子层放置在顶部(使用 setZposition)。

一切都很好,除非我在屏幕上将 2 个块放在彼此上方/下方,这样放大会导致它们重叠,然后当旋转动画开始时,它立即具有右侧块弹出它下面的块。我尝试将动画更改为 transform.rotation.x 并在块并排时获得相同的行为。

我不确定如果我没有做正确的事情,这是否是一个 iOS 错误。非常感谢任何建议。以下是转出方法:

- (void)spinOut:(id)sender
{
    NSTimeInterval animationTime=0.85;

    [UIView animateWithDuration:animationTime
                      delay:0
                    options: UIViewAnimationOptionCurveLinear
                 animations:^{
                     // setup the animation to spin the current view out
                     [CATransaction begin];
                     [CATransaction setDisableActions:YES];
                     CABasicAnimation *spinOut = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
                     [spinOut setDelegate:self];
                     [spinOut setDuration:animationTime];
                     CAMediaTimingFunction *tf = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
                     [spinOut setTimingFunction:tf];
                     [spinOut setFromValue:[NSNumber numberWithFloat:M_PI * 0.0]];
                     [spinOut setToValue:[NSNumber numberWithFloat:M_PI * 0.5]];
                     [spinOut setRemovedOnCompletion:NO];
                     [spinOut setFillMode:kCAFillModeForwards];

                     // setup variables used to roll in the next view on animation completion.
                     [pageView.layer addAnimation:spinOut forKey:kMyVeryOwnABCsSpinOutKey];

                     [CATransaction commit];
                 }
                 completion:^(BOOL finished){
                     [self setFlipOutAnimationTimer:[NSTimer scheduledTimerWithTimeInterval:animationTime target:self selector:@selector(spinIn:) userInfo:nil repeats:NO]];
                 }];

 }
4

1 回答 1

0

好的 - 这是一个老问题,但我有点想通了这个问题。由于我围绕 Y 轴翻转这些图像,因此我能够更改动画图像的 Z 位置。在我的 startAnimation 方法中,我添加了:

  float pageLevelLayerPosition;
  // logic to set the zposition variable 100 more than anything nearby 

  _originalImageViewZPosition = bigImageView.layer.zPosition;
  [bigImageView.layer setZPosition:pageLevelLayerPosition];

然后在animationDidStop中,我添加了相关的代码行将其重置回0,我正在删除动画。我有一些代码来管理变量,因此我确信这个数字比附近的任何东西都大。

我想如果我进入 3-D 动画,那么我需要更密切地控制它,但这就是导致我的问题的原因。

于 2012-11-30T21:15:49.573 回答