2019独角兽企业重金招聘Python工程师标准>>>

考虑到继承UINavigationBar使用起来会非常不便,我们决定用Category来实现,首先定义我们的category:

@interface UINavigationBar (BackgroundColor)
- (void)lt_setBackgroundColor:(UIColor *)backgroundColor;@end

实现:我们使用associatedObject将overlayView动态地绑定到UINavigationBar的instance上,当调用lt_setBackgroundColor的时候,我们只要更新这个overlayView就行啦~

@implementation UINavigationBar (BackgroundColor)static char overlayKey;- (UIView *)overlay
{    return objc_getAssociatedObject(self, &overlayKey);
}- (void)setOverlay:(UIView *)overlay
{objc_setAssociatedObject(self, &overlayKey, overlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}- (void)lt_setBackgroundColor:(UIColor *)backgroundColor
{    if (!self.overlay) {[self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];        // insert an overlay into the view hierarchyself.overlay = [[UIView alloc] initWithFrame:CGRectMake(0, -20, [UIScreen mainScreen].bounds.size.width, self.bounds.size.height + 20)];      self.overlay.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;[self insertSubview:self.overlay atIndex:0];}    self.overlay.backgroundColor = backgroundColor;
}
@end

最后在scrollViewDidScroll中,我们就可以动态地修改UINavigationBar的backgroundColor了:

[self.navigationController.navigationBar lt_setBackgroundColor:[color colorWithAlphaComponent:alpha]];

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{

CGFloat alpha=scrollView.contentOffset.y/90.0f>1.0f?1:scrollView.contentOffset.y/90.0f;

[self.navigationController.navigationBar setBackgroundImage:[self getImageWithAlpha:alpha] forBarMetrics:UIBarMetricsDefault];

}

#pragma handle image -mark

//合成图片

-(UIImage *)getImageWithAlpha:(CGFloat)alpha{

UIColor *color=[UIColor colorWithRed:1 green:0 blue:0 alpha:alpha];

CGSize colorSize=CGSizeMake(1, 1);

UIGraphicsBeginImageContext(colorSize);

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, color.CGColor);

CGContextFillRect(context, CGRectMake(0, 0, 1, 1));

UIImage *img=UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return img;

}

转载于:https://my.oschina.net/gongxiao/blog/537848

NavigationBar 渐隐效果相关推荐

  1. Image Warp插件实现图片点击扩大渐隐效果

    点我下载jQuery Image Warp插件源代码[在线演示 ][源程序下载 ] 使用说明 需要使用jQuery 库文件和jQuery Image Warp 插件库文件 使用实例 一,包含文件部分 ...

  2. 日落20181125001 - UGUI组件应用之Animation和CanvasGroup制作渐现渐隐效果

    环境 系统:Windows 10 引擎:Unity 2017.2.1f1 目的 使用Animation和Canvas Group制作渐隐渐现的效果. (1)首先把场景布局如此 (2)创建Animato ...

  3. cocos:MotionStreak拖尾渐隐效果

    目录 前言 小例 创建和传参 推送 结语 前言 本文简介cocos的MotionStreak组件,该组件非常方便的实现了一个拖尾效果,配合粒子能够实现非常好看的效果,本文则从使用上介绍一下,以后有机会 ...

  4. 动画 自制弹框上滑+渐显效果

    <view class="mask {{showShare ? 'slidefadeUp' : 'slidefadeDown'}}" wx:if="{{showSh ...

  5. jquery气泡提示效果

    效果改自:http://inezha.com/p/7797945/item737 代码注释已经尽可能的详细了,也不多说了. 越用jquery就越喜欢用它... bubble.js: /* * @dat ...

  6. Cocos Creator 的实现拖尾效果

    在游戏中,有时会需要在某个游戏对象上加上移动后的轨迹若隐若现的效果.使得游戏的效果较好,比如游戏大招,刀光,法术,流星划痕之类. Cocos Creator提供了一种内置的拖尾渐隐效果的实现方法:组件 ...

  7. 效果 - 收藏集 - 掘金

    如何用原生 JS 实现手势解锁组件 - 前端 - 掘金 这是第三届 360 前端星计划的选拔作业题.600多名学生参与了解答,最后通过了60人.这60名同学完成的不错,思路.代码风格.功能完成度颇有可 ...

  8. 2.5 随从受伤溅血效果的实现———自制卡牌游戏之旅

    文章目录 一.实现效果 二.具体实现 1. 对象创建 2. 编写代码 DamageEffect.cs ① 从预制体生成 ② 渐隐效果协程 ③ 差分的特效图片 DamageEffectTest.cs 三 ...

  9. HTML设置页面动画效果有几种,前端制作动画的几种方式(css3,js)

    制作动态的网页是是前端工程师必备的技能,很好的实现动画能够极大的提高用户体验,增强交互效果,那么动画有多少实现方式,一直对此有选择恐惧症的我就总结一下,以便在开发的时候选择最好的实现方式. 1.css ...

最新文章

  1. MySQL 性能测试
  2. 类变量和实例变量的区别是什么?
  3. hfss和python_【技术分享】python和HFSS联合仿真微带天线的教程-射频/微波-与非网...
  4. java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹
  5. python漏洞利用脚本_利用Python脚本实现漏洞情报监控与通知的经验分享
  6. 关与DataList和DataGrid的区别和重要性
  7. 多层GCN的over-smooth问题
  8. Wireshark教程(简介、抓包、过滤器)
  9. 【ArcGIS|3D分析】要素的立体显示
  10. 解决VMware重启IP地址改变的问题
  11. 最牛逼的PHP视频教程115网盘免费下载,嗷嗷给力
  12. librdkafka
  13. 计算机硬件行业深度报告,首创证券-计算机行业深度报告:物联网,研究框架-行业分析-慧博投研资讯...
  14. 《笨办法学python》第39课—— 列表的操作
  15. 用java编写矩阵运算_基本矩阵运算的Java实现
  16. 多伦多大学计算机硕士读几年,多伦多大学计算机硕士申请条件
  17. 随笔(2015.11)
  18. 3ds max 软件主菜单中添加新的菜单
  19. Linux下文件(文件夹)的压缩和解压
  20. 【仙变3】牧仙记版VM一键端

热门文章

  1. 【Leetcode_easy】657. Robot Return to Origin
  2. 【TensorFlow】:解决TensorFlow的ImportError: DLL load failed: 动态链接库(DLL)初始化例程失败...
  3. Dubbo接口测试方法及步骤
  4. Linux/unix 查看端口占用
  5. Asp.net操作数据库方法
  6. “\”C++中的换行符
  7. 数据库实现,以及工厂方法模式实现
  8. 在WinAPI环境下获得1小时前系统时间
  9. C# 中Bitmap图像处理含增强对比度的三种方法
  10. MFC C++ Cstring与string互转