<iOS 导航栏>第一节:导航栏透明方法实现代码
@interface IDSNavBarView : UIView
- (instancetype)initWithFrame:(CGRect)frame titleImg:(UIImage *)aTitleImg;
- (UILabel *)titleLabel;
- (void)animateByOffsetY:(CGFloat)offsety;
/**
语音房间新增方法,用于外部触发更改左右图片和标题
@param title 标题内容
*/
- (void)changeButtonImage;
- (void)changeButtonImagelight;
- (void)changeTitleName:(NSString *)title;
@property (nonatomic, strong) NSString *backImageName;
@property (nonatomic, strong) NSString *reportImageName;
@property (nonatomic, strong) NSString *backImageName_light;
@property (nonatomic, strong) NSString *reportImageName_light;
@property (nonatomic, copy) dispatch_block_t onBackActionBlock;
@property (nonatomic, copy) dispatch_block_t onReportBlock;
@property (nonatomic, assign) BOOL enableBackBtn;
@property (nonatomic, assign) BOOL enableReportBtn;
@property (nonatomic, assign) BOOL enableTransparent;
@end
@interfaceIDSNavBarView ()
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UIImageView *titleImgView;
@property (nonatomic, strong) UIImage *titleImg;
@property (nonatomic, strong) UIButton *backBtn;
@property (nonatomic, strong) UIButton *reportBtn;
@property (nonatomic, strong) UIView *backgroundView;
@property (nonatomic, strong) UIView *maskLine;
@end
@implementation IDSNavBarView
- (instancetype)initWithFrame:(CGRect)frame
{
return [selfinitWithFrame:frame titleImg:nil];
}
- (instancetype)initWithFrame:(CGRect)frame titleImg:(UIImage *)aTitleImg
{
self = [superinitWithFrame:frame];
if (self) {
_titleImg = aTitleImg;
[selfsetupViews];
/// 默认不显示
self.alpha = 1;
}
returnself;
}
//改变导航栏透明按钮时的显示状态
- (void)changeButtonImage
{
UIImage *backImg = ImageNamed(@"ic_global_return_light");
if (!IS_NS_STRING_EMPTY(self.backImageName)) {
backImg = ImageNamed(self.backImageName);
}
[self.backBtn setImage:backImg forState:UIControlStateNormal];
[self.backBtn setImage:backImg forState:UIControlStateHighlighted];
UIImage *reportImg = ImageNamed(@"ic_navbar_point_light");
if (!IS_NS_STRING_EMPTY(self.reportImageName)) {
reportImg = ImageNamed(self.reportImageName);
}
[self.reportBtn setImage:reportImg forState:UIControlStateNormal];
[self.reportBtn setImage:reportImg forState:UIControlStateHighlighted];
}
//改变导航栏透明按钮滑到后期改变时的显示状态(不声明代表不改变按钮状态)
- (void)changeButtonImagelight
{
UIImage *backImg = ImageNamed(@"ic_global_return");
if (!IS_NS_STRING_EMPTY(self.backImageName_light)) {
backImg = ImageNamed(self.backImageName_light);
}
[self.backBtnsetImage:backImg forState:UIControlStateNormal];
UIImage *reportImg = ImageNamed(@"ic_navbar_point_dark");
if (!IS_NS_STRING_EMPTY(self.reportImageName_light)) {
reportImg = ImageNamed(self.reportImageName_light);
}
[self.reportBtn setImage:reportImg forState:UIControlStateNormal];
}
//使用此方法自定义标题label
- (void)changeTitleName:(NSString *)title
{
if (!IS_NS_STRING_EMPTY(title)) {
self.titleLabel.alpha = 1;
self.titleLabel.textColor = NF_Color_C1;
self.titleLabel.text = title;
}
[self bringSubviewToFront:self.titleLabel];
}
//透明位移,按照滚动的位移使导航栏渐渐从透明到非透明状态
- (void)animateByOffsetY:(CGFloat)offsety
{
CGFloat fitHeight = 156;
self.alpha = 1;
self.backgroundView.alpha = offsety/fitHeight;
self.titleLabel.alpha = offsety/fitHeight;
self.maskLine.alpha = offsety/fitHeight;
if (self.backgroundView.alpha > 0.7) {
[self changeButtonImagelight];
}
else {
[self changeButtonImage];
}
}
//导航栏左侧返回按钮按钮
- (void)doBackAction:(id)sender
{
if (self.onBackActionBlock) {
self.onBackActionBlock();
}
}
//导航栏右侧按钮按钮
- (void)doReportAction:(id)sender
{
if (self.onReportBlock) {
self.onReportBlock();
}
}
#pragma mark - Setup Views.
//自定义导航栏设置,若加入_enableTransparent属性,导航栏则显示透明,否则不显示透明状态
- (void)setupViews
{
self.titleLabel.backgroundColor = [UIColorclearColor];
self.backgroundColor = [UIColorclearColor];
self.backgroundView = [[UIViewalloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 64)];
self.backgroundView.backgroundColor = [UIColorwhiteColor];
[selfaddSubview:self.backgroundView];
//self.backgroundColor = NF_Color_C1;
self.clipsToBounds = YES;
if (nil == self.titleImg) {
/// 添加 title.
{
[self addSubview:self.titleLabel];
[self.titleLabelmas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.mas_centerX);
make.left.mas_equalTo(self).offset(50.0f);
make.right.mas_equalTo(self).offset(-50.0f);
make.centerY.mas_equalTo(self.mas_centerY).offset(5.0f);
}];
}
}
else {
/// 设置image
{
self.titleImgView.image = self.titleImg;
[self addSubview:self.titleImgView];
[self.titleImgViewmas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(self.width-20, self.height-10));
make.centerX.mas_equalTo(self.mas_centerX);
make.centerY.mas_equalTo(self.mas_centerY).mas_offset(6);
}];
}
}
/// 添加分割线.
{
_maskLine = [[UIViewalloc] init];
_maskLine.backgroundColor = NF_Color_C9;
self.maskLine.alpha = 0;
[selfaddSubview:_maskLine];
[_maskLinemas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(self.width, 0.5f));
make.left.with.right.with.bottom.mas_offset(0.f);
}];
}
if(_enableTransparent) {
self.backgroundView.alpha = 0;
self.titleLabel.alpha = 0;
self.maskLine.alpha = 0;
}
else {
self.backgroundView.alpha = 1;
self.titleLabel.alpha = 1;
self.maskLine.alpha = 1;
}
}
//用set方法声明,通过声明 BOOL 变量enableBackBtn 来表明是否需要后退按键
- (void)setEnableBackBtn:(BOOL)enableBackBtn
{
if (![self.backBtnsuperview]) {
[self addSubview:self.backBtn];
[self.backBtnmas_makeConstraints:^(MASConstraintMaker *make) {
//make.size.mas_equalTo(CGSizeMake(self.backBtn.imageView.image.size.width, self.backBtn.imageView.image.size.height));
make.size.mas_equalTo(CGSizeMake(50, 50));
make.left.mas_equalTo(self).mas_offset(0.f);
make.centerY.mas_equalTo(self.mas_centerY).mas_offset(6.f);
}];
}
if (enableBackBtn) {
self.backBtn.hidden = NO;
}
else {
self.backBtn.hidden = YES;
}
}
//用set方法声明,通过声明 BOOL 变量透明来表明是否需要后退按键
- (void)setEnableTransparent:(BOOL)enableTransparent
{
if (enableTransparent) {
self.backgroundView.alpha = 0;
self.titleLabel.alpha = 0;
self.maskLine.alpha = 0;
}
else {
self.backgroundView.alpha = 1;
self.titleLabel.alpha = 1;
self.maskLine.alpha = 1;
}
}
//用set方法声明,是否需要右键
- (void)setEnableReportBtn:(BOOL)enableReportBtn
{
if (![self.reportBtnsuperview]) {
[self addSubview:self.reportBtn];
[self.reportBtnmas_makeConstraints:^(MASConstraintMaker *make) {
//CGSize imgSize = self.reportBtn.imageView.image.size;
//make.size.mas_equalTo(CGSizeMake(imgSize.width, imgSize.height));
make.size.mas_equalTo(CGSizeMake(50, 50));
make.right.mas_equalTo(self).mas_offset(-0.f);
make.centerY.mas_equalTo(self.mas_centerY).mas_offset(6.f);
}];
}
if (enableReportBtn) {
self.reportBtn.hidden = NO;
}
else {
self.reportBtn.hidden = YES;
}
}
#pragma mark - Setter & Getter.
- (UILabel *)titleLabel
{
if (nil == _titleLabel) {
_titleLabel = [[UILabelalloc] init];
}
_titleLabel.font = [UIFontboldSystemFontOfSize:Near_Final_Font_T7];
_titleLabel.textAlignment = NSTextAlignmentCenter;
_titleLabel.numberOfLines = 1;
return_titleLabel;
}
- (UIImageView *)titleImgView
{
if (nil == _titleImgView) {
_titleImgView = [[UIImageViewalloc] init];
_titleImgView.contentMode = UIViewContentModeScaleAspectFit;
}
return_titleImgView;
}
- (UIButton *)backBtn
{
if (nil == _backBtn) {
_backBtn = [UIButtonbuttonWithType:UIButtonTypeCustom];
UIImage *norImg = ImageNamed(@"ic_global_return_light");
if (!IS_NS_STRING_EMPTY(self.backImageName)) {
norImg = ImageNamed(self.backImageName);
}
UIImage *highImg = [norImg cl_imageByApplyingAlpha:0.3f];
[_backBtn setImage:norImg forState:UIControlStateNormal];
[_backBtn setImage:highImg forState:UIControlStateHighlighted];
[_backBtn addTarget:selfaction:@selector(doBackAction:) forControlEvents:UIControlEventTouchUpInside];
}
return_backBtn;
}
- (UIButton *)reportBtn
{
if (nil == _reportBtn) {
_reportBtn = [UIButtonbuttonWithType:UIButtonTypeCustom];
UIImage *norImg = ImageNamed(@"ic_navbar_point_light");
if (!IS_NS_STRING_EMPTY(self.reportImageName)) {
norImg = ImageNamed(self.reportImageName);
}
UIImage *highImg = [norImg cl_imageByApplyingAlpha:0.3f];
[_reportBtn setImage:norImg forState:UIControlStateNormal];
[_reportBtn setImage:highImg forState:UIControlStateHighlighted];
[_reportBtn addTarget:selfaction:@selector(doReportAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _reportBtn;
}
@end
_barView = [[IDSNavBarViewalloc] initWithFrame:barFrame];
self.barView.enableBackBtn = YES;
self.barView.enableTransparent = YES;
@weakify(self);
self.barView.onBackActionBlock = ^{
@strongify(self);
[self goBack];//返回操作,上个章节有讲解
};
self.barView.enableReportBtn = YES;
self.barView.enableReportBtn = NO;
self.barView.onReportBlock = ^{
@strongify(self);
[self moreButtonAction]; //导航栏右侧按钮的点击方法
};
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:NO];
}
{
// 处理导航栏
CGFloat distY = scrollView.contentOffset.y;
[self.barViewanimateByOffsetY:distY];
}
<iOS 导航栏>第一节:导航栏透明方法实现代码的更多相关文章
- OATable中column栏位数据居中的实现方法及代码
// Table column中显示居中的实现 // QpriceResultTable1 为table的名称 // noPrice 为table中的列 OATableBean table = (OA ...
- 【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃
(1)navigationBar导航栏可以被看作是self.navigationController一个属性导航控制器,它可以由点直接表示self.navigationController.navig ...
- iOS开发笔记1:[转]导航栏里的"Back"按钮显示不出来
最近项目中遇到一个问题,push过去的ViewController的Nav上面没有返回按钮,遂搜索资料,找到了以下文档.经测试i,问题解决. 原文地址:http://www.cnblogs.com/s ...
- iOS开发之 -- 判断tableview/scrollview的滑动方法,及导航栏渐变的实现代码
开发的过程中,肯定会用到在视图想上滑动的时候,在导航处做一些操作,比如向上滑动的时候,做个动画,出现一个搜索框,或者其他的操作,那么我们怎么来判断它的滑动方向呢? 首先我们应该知道tableview继 ...
- 仿酒仙网的一款jQuery侧栏弹出导航栏特效
仿酒仙网的一款jQuery侧栏弹出导航栏特效 一款常用于商城左侧商品导航的jquery菜单导航特效. 非常不错的一款商品分类特效.大家可以拿去研究研究 . 注意:该特效还支持挨千刀的IE6啊,之强大. ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- 【iOS开发-22】navigationBar导航条和navigationItem设置:基本搞定导航条上的文字和按钮以及各种跳转
http://blog.csdn.net/weisubao/article/details/39646739?utm_source=tuicool&utm_medium=referral (1 ...
- iOS仿今日头条滑动导航
之前写了篇博客网易首页导航封装类.网易首页导航封装类优化,今天在前两个的基础上仿下今日头条. 1.网易首页导航封装类中主要解决了上面导航的ScrollView和下面的页面的ScrollView联动的问 ...
随机推荐
- vuex与vue-router学习方案
1.vuex,官方vuex2.0的文档写得太简略了,先1.0的文档,研究1.0分支的counter例子.1.0文档只需看核心概念和API参考文档.2.0的用法先不管,需要的时候再说,先把1.0高熟练. ...
- 轻松掌握XMLHttpRequest对象
XmlHttp是什么? 最通用的定义为:XmlHttp是一套可以在Javascript.VbScript.Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API.XmlHt ...
- IP地址的正则表达式
关键字:IP地址 正则表达式作者:txw1958出处:http://www.cnblogs.com/txw1958/archive/2011/10/13/ip_address_regular_expr ...
- Git 内部原理--初探 .git
说到Git大家应该都非常熟悉,几乎每天都会用到它.在日常使用过程中,我们貌似并不需要关注其内部的原理,只需要记住那几个常用的命令,就可以说自己是会Git的人了.可是,事实真的是这样子的吗?今天我们就来 ...
- QT 窗体控件的透明度设置(三种方法)
整个窗体 当设置QT的窗体(QMainWindow, QDialog)时,直接用 targetForm->setWindowOpacity() 函数即可实现,效果为窗体及窗体内所有控件都透明 ...
- WPF媒体资源和图片资源寻址方式的杂谈
WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上.WPF中,资源定义的位置决定了该资源的可用范围.资源可以定义在如下范围中: (1)控件级:此时,资源只能 ...
- box-shadow 与 filter:drop-shadow 详解及技巧
box-shadow 在前端的 CSS 编写工作想必十分常见.但是 box-shadow 除去它的常规用法,其实还存在许多不为人知的奇技淫巧. 喜欢 markdown 版本的可以戳这里. box-sh ...
- vs2017 js cordova + dotnet core 开发app
原文:vs2017 js cordova + dotnet core 开发app 1.记得在index.html加入 <meta http-equiv="Content-Securit ...
- QSS 盒子模型
每个 Widget 所在的范围都是一个矩形区域(无规则窗口也是一个矩形,只是有的地方是透明的,看上去不是一个矩形),像是一个盒子一样.QSS 支持盒子模型(Box Model),和 CSS 的盒子模型 ...
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方开发环 ...