Редактировать : в комментариях ниже было отмечено, что это решение не работает в бета-версии iOS 5, поэтому будьте готовы изменить его в соответствии с вашими потребностями.
Я думаю, что для того, чтобы сделать это правильно, вы должны быть в состоянии добраться до фрейма каждого элемента панели вкладок.К счастью, это возможно:
CGFloat tabBarTop = [[[self tabBarController] tabBar] frame].origin.y;
NSInteger index = [[self tabBarController] selectedIndex];
CGFloat tabMiddle = CGRectGetMidX([[[[[self tabBarController] tabBar] subviews] objectAtIndex:index] frame]);
Приведенный выше код дает координату y верхней части панели вкладок и координату x середины выбранного элемента вкладки.Отсюда вы можете добавить свой вид индикатора к виду контроллера панели вкладок относительно этой точки.
Отказ от ответственности : опасность при таком подходе заключается в том, что он заглядывает под капот UITabBar
class, получая доступ к его иерархии представления и свойству frame
экземпляров частного UITabBarButton
класса.Возможно (однако маловероятно), что этот подход может быть затронут / сломан будущим обновлением iOS.Однако у вас нет доступа к каким-либо частным API-интерфейсам, поэтому ваше приложение не должно быть отклонено из App Store.
Я сделал простой проект iPad, демонстрирующий, как он работает , в комплектеанимации.