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