iOS关于导航栏的隐藏与渐变

项目中需要做滑动导航渐变的效果, 闲来无事,写个demo 分享一下.
具体实现有兴趣的童鞋可以下载源码看看, 注释写的很清楚;

下载源码 点这里

一、滑动渐变

渐变

大概思路是, 隐藏导航栏, 自定义一个视图 View, 覆盖在原导航栏的位置, 然后在-(void)scrollViewDidScroll:(UIScrollView *)scrollView;这个方法中,根据scrollView.contentOffset.y滑动的幅度,来改变导航的背景的透明度和控件的颜色;

#pragma mark -  重点的地方在这里 滚动时候进行计算
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
    CGFloat offsetY = scrollView.contentOffset.y;
    
    if (offsetY <= 170) {
        self.navView.headBackImgView.alpha = offsetY/170;
        self.navView.left_bt_Img = @"tab_home";
        self.navView.right_bt_Img = @"tab_mine";
        self.navView.color = kColor(0, 0, 0, offsetY/170);
        
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
    }else{
        self.navView.headBackImgView.alpha = 1;
        
        self.navView.left_bt_Img = @"tab_home_active";
        self.navView.right_bt_Img = @"tab_mine_active";
        self.navView.color = kColor(255, 81, 81, 1);
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
    }
    if (offsetY < 0) {
        CGRect rect = _backgroundImgV.frame;
        rect.size.height = _backImgHeight-offsetY;
        rect.size.width = _backImgWidth* (_backImgHeight-offsetY)/_backImgHeight;
        rect.origin.x =  -(rect.size.width-_backImgWidth)/2;
        rect.origin.y = 0;
        _backgroundImgV.frame = rect;
    }else{
        CGRect rect = _backgroundImgV.frame;
        rect.size.height = _backImgHeight;
        rect.size.width = _backImgWidth;
        rect.origin.x = 0;
        rect.origin.y = -offsetY;
        _backgroundImgV.frame = rect;
        
    }
    
    //    if (scrollView.contentOffset.y <= 0) {
    //        self.NavView.headBackView.alpha = ((240+scrollView.contentOffset.y)/140);
    //        _NavView.left_bt_Image = kMenuBTimg;
    //        _NavView.right_bt_Image = kSearchBTimg;
    //        _NavView.lab_alpha = _NavView.headBackView.alpha;
    //
    //        if (self.NavView.headBackView.alpha >= 1) {
    //
    //            _NavView.lab_alpha = 1;
    //            _NavView.headBackView.alpha = 1;
    //            _NavView.left_bt_Image = kMenuBTimg;
    //            _NavView.right_bt_Image = kSearchBTimg;
    //        }
    //    }
    
}

二、滑动隐藏导航栏 navigationBar 和 标签栏 tabBar
同样,在-(void)scrollViewDidScroll:(UIScrollView *)scrollView;方法中实现

#pragma mark UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    [UIView animateWithDuration:1 animations:^{
        
        self.tabBarController.tabBar.transform = CGAffineTransformMakeTranslation(0, 49);
        
        [UIView animateWithDuration:5 animations:^{
            
            self.navigationController.navigationBar.alpha = 0;
        }];
    }];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    [UIView animateWithDuration:1 animations:^{
        
        self.tabBarController.tabBar.transform = CGAffineTransformIdentity;
        self.navigationController.navigationBar.alpha = 1;
    }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,509评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,216评论 4 61
  • 没有太阳的中秋节 月亮也会缺席吗 女儿歪着小脑袋问我 他们去赴谁的盛宴了...
    香草a阅读 3,199评论 0 6
  • “绝望与写作素来匹配。 这样的态度的意思是,其实我也不知道我该如何写作。 我只是坐下来,铺上纸张,写。” ——《解...
    硬糖Candy阅读 1,534评论 0 0