Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c ios变换.旋转.y分解窗口_Objective C_Ios_Animation - Fatal编程技术网

Objective c ios变换.旋转.y分解窗口

Objective c ios变换.旋转.y分解窗口,objective-c,ios,animation,Objective C,Ios,Animation,我有一个奇怪的问题,在我的链动画之一。我的屏幕上的每个块都有块对象(26个),当用户按下它们时,我执行翻转。它工作得很好,但在我做这些之前,我添加了一个缩放动画,使它们在屏幕上放大50%。所以,我的顺序是: 扩大 延迟(让用户看到大图像) 旋转90%(从视图中删除块)-使用transform.rotation.y 更改图像并在中旋转 收缩 我已经将window view控制器设置为这些块的代理,这样它就可以向这些块传递一个计数器,这样我就可以将右侧子层定位在顶部(使用setZposition)

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

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

我已经将window view控制器设置为这些块的代理,这样它就可以向这些块传递一个计数器,这样我就可以将右侧子层定位在顶部(使用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]];
                 }];

 }

好吧,这是个老问题,但我已经解决了这个问题。由于我正在围绕Y轴翻转这些图像,所以我能够更改动画图像的位置。在我的startAnimation方法中,我添加了:

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

  _originalImageViewZPosition = bigImageView.layer.zPosition;
  [bigImageView.layer setZPosition:pageLevelLayerPosition];
然后在animationDidStop中,我添加了相关的代码行,将其重置为0,在那里我删除了动画。我有一些代码来管理这个变量,这样我就可以确信这个数字比附近的任何数字都大


我想如果我进入3D动画,那么我需要更紧密地控制它,但这正是造成我问题的原因。

好吧,这是一个观察问题,我只是在缩小图像后进行旋转。我想已经够好了。