Касание какао, пытающееся задержать анимацию uiview, прежде чем она снова появится
У меня есть UIView, который служит контейнером для двух табличных представлений. У меня есть две кнопки, которые управляют тем, как данные загружаются в эти таблицы. В основном, когда нажата 1 кнопка, пользовательский интерфейс выдвигается, чтобы показать табличное представление, связанное с этой кнопкой, а когда нажимается другая кнопка, мне нужно:
- близко
- скрыть первый вид таблицы
- затем показывает второй стол
- тогда 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];
}
}