IOS 滑動指示導航欄 漸變

關於導航欄漸變,本人在寫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;
}
相關文章
相關標籤/搜索