iPhone: анимация вида, когда другой вид появляется / исчезает - PullRequest
1 голос
/ 16 марта 2010

У меня есть следующая иерархия представлений

UITabBarController - UINavigationController - UITableViewController

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

Работает не так, как ожидалось.

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

Что с ним не так?

- (void)animationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
   UIView *toolBar = [[[self tabBarController] view] viewWithTag:1000];
   [toolBar removeFromSuperview];
}

- (void)viewWillAppear:(BOOL)animated 
{
   UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 44, 0);
   [[self tableView] setContentInset:insets];
   [[self tableView] setScrollIndicatorInsets:insets];
   // Toolbar initially placed outside of the visible frame (x=320)
   UIView *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(320, 480-44, 320, 44)];
   [toolBar setTag:1000];
   [[[self tabBarController] view] addSubview:toolBar];

   [UIView beginAnimations:nil context:nil];
   [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
   [UIView setAnimationDuration:0.35];
   [toolBar setFrame:CGRectMake(0, 480-44, 320, 44)];
   [UIView commitAnimations];
   [toolBar release];

   [super viewWillAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
   UIView *toolBar = [[[self tabBarController] view] viewWithTag:1000];

   [UIView beginAnimations:nil context:nil];
   [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
   [UIView setAnimationDuration:0.35];
   [UIView setAnimationDidStopSelector:@selector(animationDone:finished:context:)];
   [toolBar setFrame:CGRectMake(320, 480-44, 320, 44)];
   [UIView commitAnimations];

   [super viewWillDisappear:animated];
}

1 Ответ

0 голосов
/ 16 марта 2010

Вы пробовали просто использовать свойство toolbarItems контроллера табличного представления?UINavigationController будет управлять панелью инструментов за вас, обновляя ее элементами панели своего текущего контроллера верхнего вида;используйте метод -setToolbarHidden:animated: в ваших -viewWillAppear: и -viewWillDisappear: для управления видимостью этой панели инструментов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...