2010-05-06 4 views
0

поздравления и приветы людей, я относительно новым для Objective C & программирования iPhone, так голые со мной, если я упускать из виду то, что очевидно ..сегментированные управления покалеченные во время первоначального переходного анимации

я создал простое приложение играть с различными анимациями перехода, настраивать пару сегментированных элементов управления и слайдер.

(Flip/Curl), (слева/справа) | (вверх/вниз), (EaseInOut/EaseIn/EaseOut/Linear)

Я создал класс контроллера вида, а контроллер супер-просмотра переключается между двумя экземплярами подкласса.

, как вы можете видеть из следующего изображения, при первом переключении на второй экземпляр, в то время как анимация происходит, сегментированные элементы управления искажены; я предположил бы, что у них не было времени Enuff рисовать себя полностью ..

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

они прекрасно после того, как анимация будет сделано, и все последующие разы ..

если я указать cache:NO в setAnimationTransition это помогает, но по-прежнему существует своего рода прогрессивное раскрытие текста в сегментированных элементах управления; они по-прежнему не кажутся предварительно подготовленными или инициализированными должным образом. (и, конечно же, есть способ сделать это, кэшируя переход к представлению, поскольку в этом случае представление не меняется и должно быть кэшируемым.)

Я строю свой код на основе нескольких учебников из книги, поэтому я обновил didReceiveMemoryWarning, чтобы установить инстантивные контроллеры представлений на нуль; когда я вызываю предупреждение о памяти в симуляторе, я предполагаю, что он очищает другой вид, и он действует как первый переход после загрузки, переключение вида появляется так же, как изображение выше.

Я думаю, Трудно включить код (извините, если он считается спамом), это в основном половина его, с аналогичным фрагментом, следующим за ним в заявлении else, для случая присутствия второй стороны, перехода на 1-й ..:

- (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]; 
    } 

любые другие советы или указатели о написании хороший чистый код также ценится, я понимаю, я все еще есть много, чтобы узнать ..

поблагодарить у ур времени, - д

ответ

0

кажется, я Хафт вставить sideBViewController (insertSubView) при более низком индексе, чем sideA, а затем эта визуальная проблема не возникает ..

я пытался создавать sideB вместе с sideA в viewDidLoad, но проблема осталась, пока я не добавил sideB к представлению на более низком индексе, чем sideA ..

еще многое узнать ...

Смежные вопросы