<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联动的问 ...
随机推荐
- IOS开源项目指标
https://github.com/edagarli/open-ios-projects/blob/master/README.md 版权声明:本文博主原创文章,博客,未经同意不得转载.
- burp suite中国乱码的解决方案
于http的response还有经常出现乱码,其实解决的办法很easy 首先点击Options标签, 然后找到display 找到http message display watermark/2/te ...
- quartz2.x源码分析——启动过程
title: quartz2.x源码分析--启动过程 date: 2017-04-13 14:59:01 categories: quartz tags: [quartz, 源码分析] --- 先简单 ...
- 分布式高级(十三)Docker Container之间的数据共享
sudo docker run -it -v /usr/lib:/usr/lib/dbdata --name dbcontainer-192.168.1.184 ubuntu:14.04 sudo d ...
- HDU 1867 A + B for you again KMP解决问题的方法
这是一个典型问题KMP申请书. 结果求增加两个字符串.该法的总和是相同的前缀和后缀也是字符串的字符串,您将可以合并本节. 但是,这个问题是不是问题非常明确的含义,因为不是太清楚,外观这两个字符串的顺序 ...
- python3处理不标准json数据
keywords: python jsonsource: http://txw1958.cnblogs.com/ 先看下JSON的语法规则: JSON 语法规则JSON 语法是 JavaScript ...
- Oracle 已有则更新,没有则插入
使用merge merge into 表名 t1 using (select '数据数据' 字段1,'数据数据' 字段2 from dual) t2 on (t1.字段1 = t2.字段1) when ...
- debian安装node.js
1,先下载nodejs: # wget http://nodejs.org/dist/v0.8.7/node-v0.8.7.tar.gz 2,解压文件 # tar xvf node-v0.8.7.ta ...
- WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...
- [nginx]invalid number of arguments
invalid number of arguments nginx出现以下的错误,基本上错误的原因就是少了后面的分号导致. invalid number of arguments