2010-05-06 48 views
0

的问候和敬意乡亲错位分段控制,我是比较新的目标C & iPhone编程,所以裸跟我如果我忽略了一些东西明显..在最初的过渡动画

我创建了一个简单的应用使用不同的过渡动画,设置一对分段控件和一个滑块。

(Flip/Curl), (left/right)| (上/下), (EaseInOut/EaseIn/EaseOut/Linear)

我创建了一个视图控制器类,超级视图控制器在两个子类实例之间切换。

从以下图像可以看出,第一次切换到第二个实例,而动画正在发生时,分段控件被破坏;我猜他们没有句话之后B的时间来彻底划清自己..

http://img689.imageshack.us/img689/2320/mangledbuttonsduringtra.png

他们没事,一旦动画完成,任何后续时间..

如果我指定cache:NOsetAnimationTransition它有帮助,但似乎仍然有某种渐进显示在分段控件中的文本;他们似乎还没有被预先渲染或初始化正确..(当缓存视图被转换到时,肯定有办法做到这一点,因为在这种情况下视图不会改变,应该可缓存。)

我正在基于一本书中的几本教程构建我的代码,因此我更新了didReceiveMemoryWarning以将实例化视图控制器设置为零;当我在模拟器中调用内存警告时,我认为它正在清除另一个视图,并且它在加载后像第一个转换一样,视图正在转换为显示,就像上面的图像一样。

我想它可以'如果包含代码(对不起,如果它被认为是垃圾邮件),这基本上是其中的一半,在else声明之后有类似的块,对于第二方存在的情况,切换回第一..:

- (IBAction)switchViews:(id)sender 
{ 
    [UIView beginAnimations:@"Transition Animation" context:nil]; 

    if (self.sideBViewController.view.superview == nil) // sideA is active, sideB is coming 
    { 
     if (self.sideBViewController == nil) 
     { 
      SideAViewController *sBController = 
      [[SideAViewController alloc] initWithNibName:@"SideAViewController" bundle:nil]; 
      self.sideBViewController = sBController; 
      [sBController release]; 
     } 

     [UIView setAnimationDuration:sideAViewController.transitionDurationSlider.value]; 
     if ([sideAViewController.transitionAnimation selectedSegmentIndex] == 0) 
     { 
      // flip: 0 == left, 1 == right 
      if ([sideAViewController.flipDirection selectedSegmentIndex] == 0) 
       [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft 
             forView:self.view 
             cache:YES]; 
      else 
       [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight 
             forView:self.view 
             cache:YES]; 
     } 
     else 
     { 
      // curl: 0 == up, 1 == down 
      if ([sideAViewController.curlDirection selectedSegmentIndex] == 0) 
       [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp 
             forView:self.view 
             cache:YES]; 
      else 
       [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown 
             forView:self.view 
             cache:YES]; 
     } 

     if ([sideAViewController.animationCurve selectedSegmentIndex] == 0) 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
     else if ([sideAViewController.animationCurve selectedSegmentIndex] == 1) 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
     else if ([sideAViewController.animationCurve selectedSegmentIndex] == 2) 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
     else if ([sideAViewController.animationCurve selectedSegmentIndex] == 3) 
      [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

     [sideBViewController viewWillAppear:YES]; 
     [sideAViewController viewWillDisappear:YES]; 
     [sideAViewController.view removeFromSuperview]; 
     [self.view insertSubview:sideBViewController.view atIndex:0]; 
     [sideBViewController viewDidAppear:YES]; 
     [sideAViewController viewDidDisappear:YES]; 
    } 

书写好的干净的代码的任何其他提示或指针也可以理解,我知道我还有很多东西需要学习..

感谢ü乌拉圭回合时, - d

回答

0

看来我hafta比SIDEA较低的指数插入sideBViewController(insertSubView),再不会发生这种视觉问题..

我试图创建与SIDEA在viewDidLoad中沿sideB,但问题仍然是,直到我说sideB在比SIDEA低指数的看法..

仍然可以学到很多东西...