2013-03-05 2 views
6

У меня есть представление с большим количеством текста, поэтому я хочу разрешить пользователю скрывать statusBar + navigationBar на одном кране. Мне очень нравится стиль сокрытия в приложении «Картинки», где statusBar и navigationBar скрываются (не скользящие, просто исчезают), с некоторой анимациейDuration, поэтому я попытался сделать что-то подобное. Вот то, что я делаю в методе touchesDidBegan:скрыть панель состояния и навигационную панель одновременно, как в приложении «Картинки»

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [UIView setAnimationDuration:0.5]; 
[UIView beginAnimations:@"" context:nil]; 
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationNone]; 
    [self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:NO]; 
    [UIView commitAnimations]; 
    self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view. 
} 

Но это не одновременно скрыть полосы. Это заставляет их скользить вниз. Она имеет тот же эффект, что и эту версию метода выше:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    // deleted UIView animation, changed animation type to "slide" 
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationSlide]; 
    // enabled animation for navBar 
    [self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:YES]; 
    self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view. 
} 

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

Edit: получил это работает

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // don't forget to set navigationBar.translucent to YES 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [UINavigationBar setAnimationDuration:3.0]; 

    [UINavigationBar beginAnimations:@"" context:nil]; 
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:NO]; 
    if ([UIApplication sharedApplication].isStatusBarHidden) 
     [self.navigationController.navigationBar setAlpha:0.0]; 
    else [self.navigationController.navigationBar setAlpha:1.0]; 
    [UINavigationBar commitAnimations]; 
} 

ответ

3

проверить это демо из https://github.com/kirbyt/KTPhotoBrowser в этом вы найдете как скрыть и показать строку состояния и панель навигации.

  • основном вам нужно использовать NSTimer для настройки автоматической шкурки после 4 или 5 секунд Hidding STATUSBAR или панели навигации

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

Надеюсь, что это поможет вам в выполнении своей задачи. проверьте Образец Демо выше ссылки Github, используя точку Барака. вы можете легко найти функцию скрытия и показать Statusbar или NavigationBar.

+0

Я просмотрел их ЦСИ и нашел/появляется метод обработчика скрыть в SRC/KTPhotoBrowser/KTPhotoScrollViewController.m Они также обернуть строку состояния и панель навигации прятался в UIView анимации.Но вместо того, чтобы устанавливать navigationBarHidden в YES, они просто изменяют альфа-значение navigationBar от 1.0 до 0.0. Просто нужно сохранить navigationBar.transulent = YES. Я полагаю, setNavigationBarHidden: анимированный: метод позволяет использовать свою собственную анимацию, когда она завернута в анимацию UIView (что вызвало асинхронность bw-строки состояния и navigationBar). Спасибо хоть. – AzaFromKaza

+0

молодец, мой друг, и вы хорошо приехали! –

4

Для шкуры UIStatusBar с анимацией:

[[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationSlide]; 

Для шкуры UINavigationBar с анимацией:

[UINavigationBar beginAnimations:@"NavBarFade" context:nil]; 
self.navigationController.navigationBar.alpha = 1; 
[self.navigationController setNavigationBarHidden:YES animated:NO]; //Animated must be NO! 
[UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UINavigationBar setAnimationDuration:1.5]; 
self.navigationController.navigationBar.alpha = 0; 
[UINavigationBar commitAnimations]; 
+0

Единственное отличие вашего кода в том, что вы используете анимацию UINavigationBar. Тем не менее, тот же эффект. Кроме того, я хочу, чтобы строка состояния и панель навигации скрывались/отображались без слайда. – AzaFromKaza

0
- (void)toggleStatusBarAndNavBar:(BOOL)hidden { 

UINavigationBar *navBar = self.navigationController.navigationBar; 
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:UIStatusBarAnimationSlide]; 

[UIView animateWithDuration:0.35 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    // 先显示navigationBar 
    if (!hidden) 
    { 
     [self.navigationController setNavigationBarHidden:hidden animated:NO]; 
    } 

    navBar.frame = CGRectMake(navBar.frame.origin.x, 
           hidden ? -navBar.frame.size.height : 20, 
           navBar.frame.size.width, 
           navBar.frame.size.height); 
} completion:^(BOOL finished) { 
    if (hidden) 
    { 
     [self.navigationController setNavigationBarHidden:hidden animated:NO]; 
    } 
}]; } 

Он будет скрывать строку состояния и Панель навигации simultaneously.choose UIStatusBarAnimationSlide стиля анимации STATUSBAR в. И измените рамку navBar.

  1. когда Hidding и скрытого равного NO. мы должны сначала сменить рамку navBar, а затем скрыть navBar.
  2. при показе, и скрыто, равное ДА. сначала делаем navBar визуальным, затем меняем рамку.
  3. мы выбираем UIViewAnimationOptionCurveEaseOut, он будет выглядеть лучше.
Смежные вопросы