登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

无需继承轻量级NavigationBar平滑过渡

[复制链接]
来自: gunavy2009 分类: iOS精品源码 上传时间: 2018-4-14 22:01:17
Tag:

项目介绍:

https://github.com/amisare/NNNavigationBar

NNNavigationBar

本库用于实现UINavigationBar背景过度动画。

效果

ColorTransition
ImageTransition

介绍

NNNavigationBar是实现导航条背景过度动画的轻量级代码库。

实现

  • 代码库通过Category/Method Swizzling方式hook UINavigationBar的方法调用,实现导航条背景过度动画。

轻量

  • 仅对UINavigationBar进行了Method Swizzling方法混淆。不涉及其它类的方法混淆,如UIViewController、UINavigationController等。

  • 仅对UINavigationBar/UINavigationItem进行了必要的属性关联。

原理



                                   UINavigationItem (category_xxx)
                                                |
                                            ①  |
                                         add [.nn_xxx]
                                                |
                                                |                                          UIViewController
                                                |  ------------------------------------->  [.navigationItem]
                                                                                                  |
                                                                                                  |
                                                                                           ②     |
                                                                                       set vcn.navigationItem.nn_xxx
                                                                                                  |
                                                                                                  |
                                     UINavigationController                                       |
                                           vc stack                                 ③            V
                                     |        vcn        | <------ navigationController push/pop vcn
                                     |        ...        |                          |
                                     |        vc1        |                          |
                                     |        vc0        |                          |          
                                                                                    |
     UINavigationBar                                                                |
-----------------------                                                             |
| <——    title        |                                                             |
-----------------------                                                             |
           |                                                                        |
           |                         UINavigationBar.Items                          |
           |                               item stack                               V
           |<----- update Bar ------ | vcn.navigationItem | <------ navigationBar push/pop vcn.navigationItem
           |            ⑤           |        ...         |                         ④
           |            |            | vc2.navigationItem |                         |
           |            |            | vc1.navigationItem |                         |
           |            |            | vc0.navigationItem |                         |
           |            |                                                           |
           |            |                            ⑥                             |
           |            |------------------------>  hook  <--------------------------|
           |                                          |
           |                                          |
           |                                          |
           |             ⑦                           |
           |<------ update Bar [.nn_xx] --------------|
                                                      
  1. 在UINavigationController进行push/pop操作时会把UIViewController的UINavigationItem属性'vc.navigationItem'传递给UINavigationBar,为UINavigationBar提供UIViewController的相关数据,如UINavigationBar的title值。

  2. 在UINavigationItem中添加当前UINavigationBar背景属性,在执行push操作时通过UINavigationItem将背景属性传递到UINavigationBar修改背景,实现不同背景的切换。

  3. 通过Method Swizzling方式hook UINavigationBar方法调用实现背景过度。

使用

  1. 导入头文件

#import "NNNavigationBar.h"
  1. 颜色过度

- (void)viewDidLoad {
    [super viewDidLoad];
    // 背景显示
    self.navigationController.navigationBar.nn_backgroundViewHidden = false;
    // 设置背景颜色
    self.navigationItem.nn_backgroundColor = [UIColor orangeColor];
}
  1. 图片过度

- (void)viewDidLoad {
    [super viewDidLoad];
    // 背景显示
    self.navigationController.navigationBar.nn_backgroundViewHidden = false;
    // 设置背景图片
    self.navigationItem.nn_backgroundImage = [UIImage imageNamed:xx_image];
}
  1. 更多使用,详见demo

安装

CocoaPods

你可以用以下命令来安装最新版的 CocoaPods:

$ gem install cocoapods

podfile 中添加以下代码:

pod 'NNNavigationBar'

然后在终端运行以下命令:

$ pod install

系统要求

  • iOS 8.0+

许可证

NNNavigationBar 是基于 MIT 许可证下发布的,详情参见 LICENSE。

相关源码推荐:

我来说两句
*滑动验证:
所有评论(13)
AlonMessi 2018-4-16 10:44:39
mark,收藏了
回复
莫应有道 2018-4-16 10:45:27
不错不错,楼主辛苦了。。。
回复
pp美景 2018-4-16 10:46:10
不错不错,楼主辛苦了。。。
回复
hellokenken 2018-4-16 10:46:55
好好 学习了 确实不错
回复
kengsir 2018-4-16 10:46:57
内容很好,棒棒哒
回复
A7472 2018-4-16 10:47:07
不错不错,楼主辛苦了。。。
回复
code4app热心网友 2018-4-16 12:05:55
强烈支持楼主ing……
回复
Dill__ 2018-4-16 12:13:08
感谢分享,Code4App有你更精彩:)
回复
Dill__ 2018-4-16 12:14:22
强烈支持楼主ing……
回复
12下一页
提取码:  下载次数:18 状态:已购或VIP 售价:0(原价:15)金钱 下载权限:初级码农 
695 0 18
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表