1

У меня есть UIView, который служит контейнером для 2 табличных просмотров. У меня есть две кнопки, которые управляют тем, как данные загружаются в эти таблицы. В основном, когда одна кнопка нажали, в UIView выскальзывает, чтобы показать TableView, связанные с этой кнопкой, и когда другая кнопка получает постучала мне это нужно, чтобы:cocoa touch пытается отложить анимацию uiview до того, как она снова выскочит

  1. близко
  2. скрыть 1-й TableView
  3. затем вновь вывести 2-й TableView
  4. затем UIView скользит обратно

Вот что у меня есть

[UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationDelay:0.0]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

     if(!isTableOpen){ 

      [self.fighterTableView setHidden:YES]; 
      [self.matchTableView setHidden:NO]; 

      isTableOpen = YES; 

      viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

      [self.view bringSubviewToFront:viewTableContainer]; 
      [UIView commitAnimations]; 

     }else{ 
      //isTableOpen = NO; 
      viewTableContainer.frame = CGRectMake(-352, 0, 352, 700); 
      [UIView commitAnimations]; 
      [self.fighterTableView setHidden:YES]; 
      [self.matchTableView setHidden:NO]; 
      viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 
      [UIView commitAnimations]; 
     } 

Проблема здесь в commitanimations в инструкции else, которую я пытаюсь установить скрытые свойства, а затем снова выворачивает uiview. То, что происходит, это просто скрывает и скрывает табличное представление, но анимация никогда не бывает. Я чувствую, что мне нужно использовать задержку, но Idk как, если нет более достойного способа справиться с этим?

Мысли?

ответ

1

Вместо того, чтобы использовать метод setHidden. Почему бы вам не попробовать использовать метод setAlpha.

Это будет что-то вроде этого:

[UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

    if(!isTableOpen){ 

     [self.fighterTableView setAlpha:0.0]; 
     [self.matchTableView setAlpha:1.0]; 

     isTableOpen = YES; 

     viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

     [self.view bringSubviewToFront:viewTableContainer]; 
     [UIView commitAnimations]; 

    }else{ 
     //isTableOpen = NO; 
     viewTableContainer.frame = CGRectMake(-352, 0, 352, 700); 
     [UIView commitAnimations]; 
     [self.fighterTableView setAlpha:0.0]; 
     [self.matchTableView setAlpha:1.0]; 
     viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 
     [UIView commitAnimations]; 
    } 

Я хотел бы предложить вам выполнить
[UIView setAnimationDidStopSelector:@selector(myAnimationMethod)]

Вместо установки альфа 1,0 из matchTableView установить его внутри myAnimationMethod.

Так что-то вроде этого:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(myAnimationMethodDidFinish:)] 
if(!isTableOpen){ 

    [self.fighterTableView setAlpha:0.0]; 

    viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

    [self.view bringSubviewToFront:viewTableContainer]; 
    [UIView commitAnimations]; 

}else{ 
    //isTableOpen = NO; 
    viewTableContainer.frame = CGRectMake(-352, 0, 352, 700); 
    [self.fighterTableView setAlpha:0.0]; 
    [UIView commitAnimations]; 
} 
-(void) myAnimationMethodDidFinish:(id) sender { 

[UIView setAnimationDuration:0.5]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
if(!isTableOpen){ 

    [self.matchTableView setAlpha:1.0]; 

    isTableOpen = YES; 

    viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

    [self.view bringSubviewToFront:viewTableContainer]; 
    [UIView commitAnimations]; 

}else{ 
    //isTableOpen = NO; 
    [self.matchTableView setAlpha:1.0]; 
    viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 
    [UIView commitAnimations]; 
} 
} 
+0

Вы можете изменить время задержки, основываясь на вашем требовании. – m4n1c

+0

Будет ли этот метод выполняться после части «commitAnimations»? Imma попробует это как можно скорее после работы. – gdubs

+0

также, dont я должен удалить viewtablecontainer.frame из if else, так как он уже находится в анимационном режиме? или нет? – gdubs