文档章节

iOS中导航栏的渐变颜色效果的实现

如若初见
 如若初见
发布于 2016/04/12 13:22
字数 412
阅读 3990
收藏 5

二、导航栏渐变透明

思路:给navigationBar一张空的图片,设置frame为0,在navigationBar上自定义view,在运行时添加view,滚动时修改我们自定义的UIView的alpha就可以实现导航栏渐变透明。

导航栏的特点:

1)导航栏默认有几层   ——>4层

2)设置setBarTintColor   导航栏有  6层

   [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];

3)设置图片  导航栏有  2层

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];

具体代码

1)>>创建分类 继承自UINavigationBar

注意:分类可以添加属性(不会生成带下划线的成员变量,没有setter和getter方法),添加属性时,有的时候是不需要创建属性的,可以改变系统自身内部的属性。或者是自己通过运行时创建的。

面试》分类和继承的区别:两者都可以扩展方法和扩展属性。但分类

没有继承关系,耦合度低。分类无继承关系,只是扩充方法。

2) #import <objc/runtime.h>

@implementation UINavigationBar (NavAlpha)
static char alView;

-(
void)setAlphaView:(UIView *)alphaView
{
   
objc_setAssociatedObject(self, &alView, alphaView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(
UIView *)alphaView
{
 
return  objc_getAssociatedObject(self, &alView);

}

3) -(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
   
UIColor *color = [UIColor redColor];
   
//渐变透明
   
//当前滚动的Y
   
CGFloat scrollY =  scrollView.contentOffset.y;
   
   
CGFloat alphaScale = ( 30 + 64 - scrollY)/64;
   
   
if (scrollY > 30) {
       
//渐变
//        NSLog(@"%f",alphaScale);
//        self.navigationController.navigationBar.alpha = alphaScale;
       
        [
self.navigationController.navigationBar setalphaNavigationWithColor:[color colorWithAlphaComponent:alphaScale]];
       
    }
else
    {
//        self.navigationController.navigationBar.alpha = 1;
        [
self.navigationController.navigationBar setalphaNavigationWithColor:[color colorWithAlphaComponent:1]];
    }

}


4) //设置渐变
-(
void)setalphaNavigationWithColor:(UIColor *)color
{
   
if (!self.alphaView) {
       
       
//设置背景图片
        [
self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
       
       
//创建自定义透明的view
       
self.alphaView = [[UIView alloc]initWithFrame:CGRectMake(0,-20, [UIScreen mainScreen].bounds.size.width, 64)];
       
       
//插入添加
        [
self insertSubview:self.alphaView atIndex:0];
    }
   
//设置透明的颜色
    [
self.alphaView setBackgroundColor:color];
   

}


© 著作权归作者所有

如若初见
粉丝 20
博文 30
码字总数 22876
作品 0
私信 提问
定制iOS 7中的导航栏和状态栏

由于种种原因,申请了一个开源中国的帐号,也许会由于我的不耐心,不会亲自去一步步的写博文,但准备把自己看到的好的,都转载过来,就当时资源的存储,也算是一种推广吧。 iOS 7 教程:定制...

谁家的阿毛
2013/11/21
1K
0
iOS运营级B2B服务平台App、自定义图标库、个人中心页面、识别身份证Demo、瀑布流等源码

iOS精选源码 简单的个人中心页面-自定义导航栏并予以渐变动画(http://www.code4app.com/thread-10860-1-1.html) 一个近乎完整的可识别中国身份证信息的Demo 可自动快速...(http://www.code4a...

Android爱开源
2018/10/25
17
0
createStackNavigator

createStackNavigator 提供APP屏幕之间切换的能力,它是以栈的形式还管理屏幕之间的切换,新切换到的屏幕会放在栈的顶部。 屏幕转场风格 默认情况下,createStackNavigator提供了转场过渡效果...

不负好时光
03/15
28
0
『React Navigation 3x系列教程』之createStackNavigator开发指南

createStackNavigator 提供APP屏幕之间切换的能力,它是以栈的形式还管理屏幕之间的切换,新切换到的屏幕会放在栈的顶部。 屏幕转场风格 默认情况下,createStackNavigator提供了转场过渡效果...

JiaPengHui
2018/12/24
0
0
React Navigation

https://reactnavigation.org/docs/intro/nesting 官网 http://blog.csdn.net/u013718120/article/details/72357698 http://www.jianshu.com/p/2f575cc35780 这里只是基本用法,高级详情用法......

Chason-洪
2017/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
7
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
9
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部