Я пытаюсь анимировать элементы UITabBar с помощью UIImageView и устанавливаю его кадр в том же кадре, что и мой UITabBarItem, когда представление впервые отображается для пользователя.В другом проекте он отлично работает с viewDidAppear, логи показывают, что кадр находится в том же кадре, что и в моем исходном проекте (у меня 5 элементов, а 5-й элемент всегда на 333, 1).В моем исходном проекте viewDidAppear вернет 0, 0 и вернет 333, 1 для viewDidLayoutSubviews.Я переместил код для анимации в viewDidLayoutSubviews и обнаружил, что он вызывается дважды и возвращает 2 значения, 0, 0 при первом вызове и 333, 1 при втором вызове.
Есть ли способ начатьанимация после viewDidLayoutSubviews завершается вторым вызовом?
Я пытался перемещаться по коду анимации в viewWillAppear, viewDidAppear и viewDidLayoutSubviews.
viewWillAppear и viewDidAppear приводили к преобразованному исходному CGPoint какCGPoint панели вкладок (0, 617).
viewDidLayoutSubviews привел к преобразованию CGPoint в качестве нового CGPoint панели вкладок (0, 687) при первом вызове и запускает анимацию, а фактический кадр послеанимация заканчивается при втором вызове.
Следующий код - это то, что у меня есть в моем viewDidLayoutSubviews:
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if(self.fromTabBar) {
NSInteger index = 5;
UIImageView *imageView = [[self.tabBar.subviews lastObject].subviews firstObject];
[self startAnimation:imageView withTag:index];
}
}
Следующий код предназначен для startAnimation: withTag::
-(void)startAnimation:(UIImageView *)imageView withTag:(NSInteger)tag {
CGPoint point = [imageView.superview convertPoint:imageView.frame.origin toView:self.view];
UIImageView *hexagon = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"vector-profile"]];
[hexagon setFrame:CGRectMake(point.x, point.y, imageView.frame.size.width, imageView.frame.size.height)];
hexagon.alpha = 0;
[self.view addSubview:hexagon];
[UIView animateWithDuration:0.5 animations:^{
imageView.transform = CGAffineTransformMakeScale(0.45, 0.45);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.5 animations:^{
imageView.alpha = 0;
hexagon.alpha = 1;
} completion:nil];
}];
}
параметр tag больше не используется в этом методе.
Я ожидаюct выходной UIImage должен быть поверх того, где находится предполагаемое изображение UITabBarItem (в данном случае, 5-ая позиция в UITabBar).Это сработало в другом проекте, но мой текущий проект, кажется, обрабатывает рендеринг по-другому.