本文主要介紹的是關于iOS中scrollview上拉顯示Navbar下拉隱藏的相關內容,分享出來供大家參考學習,下面來看看詳細的介紹:
動畫效果:
關于下拉隱藏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]; }}
第三種: 是根據拖拽的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 的狀態,建議放在viewWillDisappear里,否則在進入下一個頁面里很突兀。-(void)viewWillDisappear:(BOOL)animated{ [self.navigationController setNavigationBarHidden:NO animated:YES];}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家武林網的支持。
新聞熱點
疑難解答