Скрыть панель навигации при двойном щелчке на UIview - PullRequest
0 голосов
/ 18 января 2012

Как скрыть панель навигации при двойном нажатии и показать одним нажатием на UIView без использования контроллера навигации?А также анимации при сокрытии и показе?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 18 января 2012
UITapGestureRecognizer* tapGesture =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(your_selector)];
tapGesture.numberOfTapsRequired = 2;
[self.view addGestureRecognizer:tapGesture];
[tapGesture release];

В вашем селекторе:

-(void)your_selector{
    [UIView animateWithDuration:0.5
                 animations:^{
                     bar.frame = CGRectOffset(bar.frame, 0, bar.bounds.size.height*bar.frame.origin.y<0?-1:1);
                 }];
}

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

Проект XCode - пример

0 голосов
/ 18 января 2012

Вы можете иметь UINavigationBar без контроллера навигации:

navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 40.0f)];
[navBar setDelegate:self];
[mainView addSubview:navBar];

UITapGestureRecognizer - это конкретный подкласс UIGestureRecognizer, который ищет один или несколько нажатий:

UITapGestureRecognizer *doubleTap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideNavBar:)];
[doubleTap setNumberOfTapsRequired:2];
[YOURVIEW addGestureRecognizer:doubleTap];

UITapGestureRecognizer *singleTap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showNavBar:)];
[singleTap setNumberOfTapsRequired:1];
[YOURVIEW addGestureRecognizer:singleTap];

Вот методы, которые показывают или скрывают панель навигации:

- (void)hideNavBar:(id)sender 
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0f]; //Animation duration in seconds

    navBar.alpha = 0.0f;

    [UIView commitAnimations];
}

- (void)showNavBar:(id)sender 
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0f]; //Animation duration in seconds

    navBar.alpha = 1.0f;

    [UIView commitAnimations];
}
0 голосов
/ 18 января 2012

попробуйте это для сокрытия

[UIView beginAnimations:@"Hide bar animation" context:NULL];

[UIView setAnimationDuration:0.5];

navigationBar.alpha = 0.0;

[UIView commitAnimations];

for showing

[UIView beginAnimations:@"Show bar animation" context:NULL];

[UIView setAnimationDuration:0.5];

navigationBar.alpha = 1.0;

[UIView commitAnimations];

но с UINavigationController это слишком просто ...

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