我對iOS的UITabBarController
的標籤欄有疑問。iOS-如何用動畫隱藏/顯示UITabBarController的標籤欄?
我使用的是UITabBarController
來顯示一些視圖,但我希望視圖儘可能以較大的屏幕顯示。是否有可能隱藏標籤欄,使其通常不顯示,直到用戶觸摸屏幕,然後標籤欄將(動畫)顯示在底部。然後,幾秒鐘後,如果什麼都沒有完成,那麼標籤欄將再次消失,以便視圖再次成爲全屏幕?
我對iOS的UITabBarController
的標籤欄有疑問。iOS-如何用動畫隱藏/顯示UITabBarController的標籤欄?
我使用的是UITabBarController
來顯示一些視圖,但我希望視圖儘可能以較大的屏幕顯示。是否有可能隱藏標籤欄,使其通常不顯示,直到用戶觸摸屏幕,然後標籤欄將(動畫)顯示在底部。然後,幾秒鐘後,如果什麼都沒有完成,那麼標籤欄將再次消失,以便視圖再次成爲全屏幕?
不要認爲這將適用於Apple的UIGuidelines。您使用的視圖被繪製在標籤欄的上方,所以如果您將其淡入淡出,則不會出現任何內容。
你可以用按鈕代替標籤欄做一個小視圖,它可以做你想做的事情。
這是怎麼表現出來
- (void)showTabBar:(UITabBarController *)tabbarcontroller
{
tabbarcontroller.tabBar.hidden = NO;
[UIView animateWithDuration:kAnimationInterval animations:^{
for (UIView *view in tabbarcontroller.view.subviews) {
if ([view isKindOfClass:[UITabBar class]]) {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y-49.f, view.frame.size.width, view.frame.size.height)];
}
else {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height-49.f)];
}
}
} completion:^(BOOL finished) {
//do smth after animation finishes
}];
}
...這是你如何把它隱藏
- (void)hideTabBar:(UITabBarController *)tabbarcontroller
{
[UIView animateWithDuration:kAnimationInterval animations:^{
for (UIView *view in tabbarcontroller.view.subviews) {
if ([view isKindOfClass:[UITabBar class]]) {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y+49.f, view.frame.size.width, view.frame.size.height)];
}
else {
[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height+49.f)];
}
}
} completion:^(BOOL finished) {
//do smth after animation finishes
tabbarcontroller.tabBar.hidden = YES;
}];
}
隨着接受的答案,在iOS 7,當你隱藏標籤欄和你再次顯示大小是錯誤的。此代碼給出了更好的結果:
- (void) toggleTabBar: (UITabBar *)tabBar view: (UIView*) view {
tabBar.hidden = NO;
[UIView animateWithDuration:0.5 animations:^{
if (hiddenTabBar) {
tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height-tabBar.bounds.size.height/2);
}
else {
tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height+tabBar.bounds.size.height);
}
} completion:^(BOOL finished) {
hiddenTabBar = !hiddenTabBar;
tabBar.hidden = hiddenTabBar;
}];
}
謝謝,這個答案幫了我。 :)我也在完成塊中將標籤欄'hidden'屬性設置爲'YES'。這對於確定在視圖出現時是否需要顯示標籤欄非常有用。 – James 2012-10-12 12:40:42
你說得對。我剛剛更新了代碼。謝謝。 – 2012-10-12 13:05:04
您的原始代碼已經非常有用,但是因爲您決定更新它,所以對於'-showTabBar:''hidden'屬性應該在動畫塊(而不是完成塊)之前設置爲「NO」。否則,效果看起來很奇怪。 – James 2012-10-13 09:53:41