關於導航欄漸變,本人在寫APP的時候,發現了各路大神各現其通,其實我以爲這個是個很簡單的問題,不須要搞得那麼麻煩,對個項目要求整齊來講,通常會建一個工具類,自定義View,各個同事須要的時候,直接調用便可,以下代碼:框架
-(void)craetNavBar{ self.Naviews=[[NavBarViewHiddenAphle alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, Height_NavBar)]; self.Naviews.alpha = 0.0; self.Naviews.delegate=self; [self.view addSubview:self.Naviews]; }
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat minAlphaOffset = - Height_NavBar; CGFloat maxAlphaOffset = 200; CGFloat offset = scrollView.contentOffset.y; CGFloat alpha = (offset - minAlphaOffset) / (maxAlphaOffset - minAlphaOffset); // if (offset <= 0) { // self.Naviews.alpha = 0.0; // }else{ // self.Naviews.alpha = alpha; // NSLog(@"%f",alpha); // // }或者: if (offset <= 0) { self.Naviews.alpha = 0.0; }else{ self.Naviews.alpha = offset/maxAlphaOffset; NSLog(@"%f",alpha); } }
第二種方式即是,運行時動態綁定工具
咱們能夠在運行時動態綁定他的背景視圖,而後設置他的背景透明度,網上有一個經過類別方式動態綁定實現導航欄顏色漸變的三方框架,感興趣的朋友能夠自行去研究研究LTNavigation。spa
第三即是直接獲取那張ImageView,而後設置他的透明度。code
其實咱們從結構圖中能夠看出來,它是NavigationBar的子視圖,咱們能夠經過for…in循環遍歷navigationBar.subviews,而後得到這個view。blog
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; //設置透明導航欄 UIView *barImageView = self.navigationController.navigationBar.subviews.firstObject; barImageView.alpha = 0.0; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat minAlphaOffset = - 88; CGFloat maxAlphaOffset = 200; CGFloat offset = scrollView.contentOffset.y; CGFloat alpha; if (offset <= 0) { alpha = 0.0; } else { alpha = (offset - minAlphaOffset) / (maxAlphaOffset - minAlphaOffset); } UIView *barImageView = self.navigationController.navigationBar.subviews.firstObject; barImageView.alpha = alpha; }