我的一个连锁动画中有一个奇怪的问题。我的屏幕上的每个块(其中 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]];
}];
}