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