iOS實現(xiàn)scrollview上拉顯示Navbar下拉隱藏功能詳解
本文主要介紹的是關于iOS中scrollview上拉顯示Navbar下拉隱藏的相關內(nèi)容,分享出來供大家參考學習,下面來看看詳細的介紹:
動畫效果:
關于下拉隱藏Nabbar,上拉顯示,有三種方式:推崇第一種,但是做的還是沒簡書、知乎那樣流暢,第一種是對navbar做了平移,第二種,第三種都是隱藏。。
方法如下:
第一種,和第二種處理時機一樣,但是效果更好,并沒有處理Navbar 的隱藏。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ oldY = scrollView.contentOffset.y; } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ if (scrollView.contentOffset.y > oldY) { [UIView animateWithDuration:0.3 animations:^{ self.navigationController.navigationBar.transform = CGAffineTransformMakeTranslation(0, -64); }]; ; }else{ [UIView animateWithDuration:0.3 animations:^{ self.navigationController.navigationBar.transform = CGAffineTransformIdentity; }]; } } -(void)viewWillDisappear:(BOOL)animated{ self.navigationController.navigationBar.transform = CGAffineTransformIdentity; }
第二種:在開始拖拽的時候保存偏移量,結束拖拽的時候比較當前偏移量,判斷是否隱藏Navbar。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ oldY = scrollView.contentOffset.y; } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ if (scrollView.contentOffset.y > oldY) { [CATransaction begin]; [CATransaction setAnimationDuration:1.0]; [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; //set the position [self.navigationController setNavigationBarHidden:YES animated:YES]; [CATransaction commit]; ; }else{ [CATransaction begin]; [CATransaction setAnimationDuration:1.0]; [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]]; [self.navigationController setNavigationBarHidden:NO animated:YES]; [CATransaction commit]; } }
第三種: 是根據(jù)拖拽的velocity進行判斷,很霸道但是效果不如第一種,,隱藏的時機不對你可以做個比較;
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{ if(velocity.y>0) { [self.navigationController setNavigationBarHidden:YES animated:YES]; } else { [self.navigationController setNavigationBarHidden:NO animated:YES]; } } 最后選擇合適的時候恢復Navbar 的狀態(tài),建議放在viewWillDisappear里,否則在進入下一個頁面里很突兀。 -(void)viewWillDisappear:(BOOL)animated{ [self.navigationController setNavigationBarHidden:NO animated:YES]; }
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家腳本之家的支持。
相關文章
iOS支付寶、微信、銀聯(lián)支付集成封裝調(diào)用(下)
本篇文章通過代碼實例給大家講述了iOS支付寶、微信、銀聯(lián)支付集成封裝調(diào)用,對此有需要的朋友可以測試參考下。2018-04-04iOS應用中發(fā)送HTTP的get請求以及HTTP異步請求的方法
這篇文章主要介紹了iOS應用中發(fā)送HTTP的get請求以及HTTP異步請求的方法,代碼為傳統(tǒng)的Objective-C語言,說明都簡單地融入于注釋之中,需要的朋友可以參考下2016-02-02ios8 UITableView設置 setSeparatorInset UIEdgeInsetsZero不起作用的解決
這篇文章主要介紹了ios8 UITableView設置 setSeparatorInset UIEdgeInsetsZero不起作用的解決辦法(去掉15px空白間距)的相關資料,需要的朋友可以參考下2016-02-02