2014-10-21 3 views
0

все. Я - супер-новичок в программировании приложений ios, и мне совершенно нелегко делать представления с TabBar, которые будут скрыты при прокрутке вверх/вниз по scrollviews. (Просмотров были бы интересны ...)Как я могу сделать «прокрутку к полноэкранному» с помощью UITabBarController?

Я тщательно искал в Интернете и нашел такую ​​библиотеку; YIFullScreenScroll from GitHub

Однако в этом примере кажется, что TabBar и ToolBar появляются и исчезают только в верхней части представления и не работают в середине экрана.

Я действительно хотел бы знать, как управлять TabBar и тулбар скрыты даже в середине зрения прокрутки. (Как и Pinterest ...)

Извиняется за мои грязные писания заранее ...

Но, пожалуйста, помогите мне !!!

ответ

1

Я не знаком с Pinterest, поэтому надеюсь, что правильно понял, что вы пытаетесь сделать.
Я добрая к объектив-с, но, возможно, есть гораздо более простой способ сделать это, но это выполняет свою работу.

Я не являюсь носителем английского языка, поэтому, если мои объяснения недостаточно ясны, скажите мне, и я попытаюсь перефразировать его.

Во-первых, соответствовать UIScrollView делегата и создать 2 свойства провести оригинальную рамку панели панели вкладок и навигации

Кроме того, установить делегата на ваш взгляд скроллинга быть ваш контроллер представления, либо из интерфейса строитель или по коду

ViewController.m 
@interface ViewController() <UIScrollViewDelegate> 
@property (nonatomic) CGRect navBarFrame; 
@property (nonatomic) CGRect tabBarFrame; 
@end 

Затем в viewDidLoad установите вышеуказанные свойства

- (void)viewDidLoad { 
    [super viewDidLoad] 
    self.navBarFrame = self.navigationController.navigationBar.frame; 
    self.tabBarFrame = self.tabBarController.tabBar.frame; 
} 

Теперь мы будем использовать делегат метамфетамин мнение о скроллинга чтобы определить, когда начался свиток.

Во-первых, мы начинаем с делегатом, который вызывается, когда начинается прокрутки, чтобы скрыть навигации и вкладки бары

- (void)scrollViewDidBeginDragging:(UIScrollView *)scrollView 
{ 
     [UIView animateWithDuration: 0.3 
         delay: 0 
        options: UIViewAnimationOptionCurveLinear 
       animations: ^(void){ 
        CGFloat tabBarX = self.tabBarController.tabBar.frame.origin.x; 
        CGFloat tabBarWidth = self.tabBarController.tabBar.frame.size.width; 
        CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height; 
        self.tabBarController.tabBar.frame = CGRectMake(tabBarX, self.view.frame.size.height, tabBarWidth, tabBarHeight); 

        CGFloat navBarX = self.navigationController.navigationBar.frame.origin.x; 
        CGFloat navBarWidth = self.navigationController.navigationBar.frame.size.width; 
        CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height; 
        self.navigationController.navigationBar.frame = CGRectMake(navBarX, 0, navBarWidth, navBarHeight); 
       } 
       completion: ^(BOOL finished){ 
        if(finished){ 
         [self.tabBarController.tabBar setHidden: YES]; 
         [self.navigationController.navigationBar setHidden: YES]; 
        } 
       }]; 
} 

Теперь мы будем использовать 2 методы делегата, чтобы определить, когда свиток концы, чтобы показать вкладку бар и панель навигации.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
if(!decelerate){ 

    [self.tabBarController.tabBar setHidden: NO]; 
    [self.navigationController.navigationBar setHidden: NO]; 

    [UIView animateWithDuration: 0.3 
        animations: ^(void){ 
         self.tabBarController.tabBar.frame = self.tabBarFrame; 
         self.navigationController.navigationBar.frame = self.navBarFrame; 
        }]; 
     } 
} 


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    [self.tabBarController.tabBar setHidden: NO]; 
    [self.navigationController.navigationBar setHidden: NO]; 

    [UIView animateWithDuration: 0.3 
        animations: ^(void){ 
         self.tabBarController.tabBar.frame = self.tabBarFrame; 
         self.navigationController.navigationBar.frame = self.navBarFrame; 
       }]; 
} 

Причина мы называем 2 отдельных методов является то, что первый из них вызывался всякий раз, когда пользователь прекращает прокрутку, даже если вид прокрутки еще прокрутки (например, при прокрутке очень быстро, а затем вы перестанете прокрутки , просмотр прокрутки по-прежнему прокручивается на пару секунд, пока он полностью не остановится)
Первый метод также имеет переменную «замедлить», которая проверяет, прокручивается ли прокрутка.
Поскольку я не хотел показывать панель вкладок и панель навигации, пока прокрутка пока еще прокручивается,
Первый способ запускает код, отображающий снова панель навигации и табуляции, только если «замедлить» значение false, это означает, что прокрутка остановлена,

Второй метод вызывается только в том случае, если прокрутка просматривалась после того, как пользователь остановил прокрутку, и только после завершения прокрутки.
И тогда мы будем запускать тот же код, что и выше, чтобы снова отобразить вкладку и панели навигации.

В основном мы создаем анимацию, которая перемещает рамку вкладки и панели навигации из вида или в представление.

Я произвольно задал продолжительность анимации 0,3,
Вы можете изменить ее, чтобы быть более или менее, если вы хотите, чтобы бары отображались и спрятались быстрее или медленнее.

Удачи.

+0

Большое вам спасибо за ваш источник! ваше объяснение достаточно ясное, поэтому мне не потребовалась дальнейшая перефразировка ... Я изучил методы, которые вы мне дали, и я нашел, что это работает! Тем не менее, с '- (void) scrollViewDidEndDragging: (UIScrollView *) scrollView будетDecelerate: (BOOL) замедлить' метод, анимация выглядела немного странно. Итак, как вы полагаете, я буду использовать другой метод. В любом случае, большое вам спасибо за вашу помощь !!!! –

+0

Большая часть кода, работает как очарование! – loretoparisi

Смежные вопросы