IOS實現(xiàn)上滑隱藏NvaigtionBar而下拉則顯示效果
更新時間:2016年09月01日 14:42:37 投稿:daisy
這篇文章給大家介紹了如何實現(xiàn)APP上滑時隱藏navigationBar而下拉則又會顯示,雖然也是隱藏但是效果和其他完全不一樣,因為以前沒做過所以試著去實現(xiàn)一下,現(xiàn)在分享給大家,有需要的可以參考借鑒。
先看看原APP的效果

實現(xiàn)過程
主要是給view中的滾動視圖添加一個KVO來監(jiān)視它的滑動,再根據(jù)它的offset來做一下操作,下面是代碼
[myTableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
獲取tableView的 contentOffset 之后再根據(jù)具體需求來實現(xiàn)邏輯判斷
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
if ([object isEqual:myTableView] && [keyPath isEqualToString:@"contentOffset"]) {
//獲取新值舊值
CGFloat newY = [change[@"new"] CGPointValue].y;
CGFloat oldY = [change[@"old"] CGPointValue].y;
float i = newY - oldY;//下拉是新值小于舊值的,所以i<0 是下拉 i>0 是上滑
NSLog(@"%f",myTableView.contentOffset.y);
if (myTableView.contentOffset.y > -64 && myTableView.contentOffset.y <= 24) {//邊界條件,此處不精確
if (i <= 0 && _isHide == NO && self.navigationController.navigationBar.frame.origin.y == 20){
//下拉+bar 已經顯示的狀態(tài),不再移動
return;
}
_isHide = NO;
//設置navigationbar 的frame 使他根據(jù)tableView來滑動
self.navigationController.navigationBar.frame = CGRectMake(0, -44 - myTableView.contentOffset.y, self.view.bounds.size.width, 44);
//控制透明度
self.navigationController.navigationBar.alpha = -myTableView.contentOffset.y/64;
}else if (myTableView.contentOffset.y > 24) {
if (i > 10) {//更改數(shù)值大小可以控制觸發(fā) navigation bar 的滑動速度
_isHide = YES;
}else if(i < -10) {
_isHide = NO;
}
}
[self.navigationController setNavigationBarHidden:_isHide animated:YES];
}
}
完成效果圖

總結
其實這個效果實現(xiàn)起來確實沒有什么難度,寫這個主要是給大家看一下我的實現(xiàn)過程與思路,希望可以幫到大家。如果有疑問可以留言交流,謝謝大家對腳本之家的支持。
相關文章
iOS利用MJRefresh實現(xiàn)自定義刷新動畫效果
本文主要介紹iOS 利用MJRefresh實現(xiàn)自定義動畫的上拉刷新下拉加載效果,要想實現(xiàn)此功能,首先得有一套load的圖片數(shù)組。接下來通過本文給大家詳解介紹實現(xiàn)過程2017-02-02
iOS開發(fā)實現(xiàn)搜索框(UISearchController)
這篇文章主要為大家詳細介紹了iOS開發(fā)實現(xiàn)搜索框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08

