2010-05-06 31 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低指數的看法..

仍然可以學到很多東西...