我的一个链动画中有一个奇怪的问题。我有屏幕上每个块的块对象(其中26个),当用户按下它们时,我执行翻转。它工作得很好,但是在我做这些之前我添加了一个缩放动画,使它们在屏幕上大约50%。所以,我的序列是:
放大 延迟(让用户看到大图) 旋转90%(从视图中移除块) - 使用transform.rotation.y 改变形象和旋入式表 收缩。
我已经将窗口视图控制器设置为这些块的委托,这样它就可以将计数器传递给块,这样我就可以将右子层放在顶部(使用setZposition)。
一切都很好,除非我在屏幕上有两个位于彼此上方/下方的区块,这样放大会使它们重叠,然后当旋转动画开始时,它立即有了块的一侧在它下面的块后面弹出。我已经尝试将动画更改为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]];
}];
}
答案 0 :(得分:0)
好的 - 这是一个老问题,但我有点想出了这个问题。由于我是围绕Y轴翻转这些图像,我能够改变动画图像的Zposition。在我的startAnimation方法中,我添加了:
float pageLevelLayerPosition;
// logic to set the zposition variable 100 more than anything nearby
_originalImageViewZPosition = bigImageView.layer.zPosition;
[bigImageView.layer setZPosition:pageLevelLayerPosition];
然后在animationDidStop中,我添加了相关的代码行,将其重置为0,我将删除动画。我有一些代码来管理变量,以便我确信这个数字比附近的任何数字都大。
我想如果我进入三维动画,那么我需要更加密切地控制它,但这就是造成我问题的原因。