动画视图和它的子视图分开

时间:2012-04-15 14:12:23

标签: cocoa-touch uiview uiviewanimation uianimation

我有一个包含子视图interface的视图touchWheel。点击interface上的最小化按钮,我想执行转换&将视图发送到屏幕的右下角。问题是我想“分离”touchWheel视图&将其与父视图interface分开发送到角落后面(&实际上淡出)。

当我尝试这个时,我遇到了一个问题。我的动画最初工作得很好根据需要,touchWheel会被发送到底角。当touchWheel距目的地一半时,我会为interface设置动画,使其跟随touchWheel

interface开始制作动画后,它似乎可以控制touchWheel& touchWheel改变了方向。

似乎interface仍然保留对touchWheel的控制权,因为它是其父视图。

- (void)hideInterfaceButtonClicked : (id) sender
{

    [[NSNotificationCenter defaultCenter] postNotificationName:@"RemoveGrey" object:self];

   //Remove Views & transform
   [touchWheel removeViews];
   interfaceHidden = YES;

      //Send Interface to corner

[UIView animateWithDuration:1.25
                  delay:0.0
                options:UIViewAnimationCurveEaseIn
             animations:^{
                 // Move to the right

                 CGAffineTransform translateInterface = CGAffineTransformMakeTranslation(437,200); 
                 // Scale
                 CGAffineTransform scale = CGAffineTransformMakeScale(0.135,0.135);   

                 // Apply them to the view
                 self.transform = CGAffineTransformConcat(scale, translateInterface);

                self.alpha = 0.0;

             } completion:^(BOOL finished) {
                 NSLog(@"Animation Has Stopped");
                 [[NSNotificationCenter defaultCenter] postNotificationName:@"hiddenInterfaceViewNeeded" object:self]; //after MoveView finishes


             }]; 



}

touchWheel之外的其他内容进行interface子视图会产生其他问题,这些问题会使事情进一步复杂化。

任何想法如何解决这个问题?任何提示非常感谢:)

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  1. touchWheel移至interface的超级视图,使用convertRect:toView:重新计算其框架,以便touchWheel看起来具有相同的窗口坐标。
  2. 将两个视图设置为最终位置的动画。
  3. 在动画的完成块中,执行与步骤1相反的操作:将touchWheel作为interface的子视图,再次重新计算其帧。
  4. 它似乎并不太复杂,但有一点需要注意:您可能希望暂时禁用最大化按钮(或任何适当的控件)以防止动画期间的最大化操作。否则,这种方法将导致不可预测的结果。