Касание какао, пытающееся задержать анимацию uiview, прежде чем она снова появится

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

  1. близко
  2. скрыть первый вид таблицы
  3. затем показывает второй стол
  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];
        }

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

Мысли?

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];
}
}
Другие вопросы по тегам