通過手勢操作改變導(dǎo)航欄的透明度

主要實現(xiàn)原理:在導(dǎo)航欄的的位置上放置一個自定義的view,通過手勢操作來改變透明度.


自定義的view(通過繪圖的方式):

```javascript

- (void)drawRect:(CGRect)rect {

UIBezierPath*rectPath = [UIBezierPathbezierPathWithRect:rect];

[[UIColorwhiteColor]set];

[rectPathfill];

//畫線

// 1個點--> 2個像素(4s, 5, 6)

// 1個點--> 3個像素

//線高度

CGFloatlineH =1/[UIScreenmainScreen].scale;

CGFloatlineY = rect.size.height- lineH;

UIBezierPath*linePath = [UIBezierPathbezierPath];

//線的起點

[linePathmoveToPoint:CGPointMake(0, lineY)];

[linePathaddLineToPoint:CGPointMake(rect.size.width, lineY)];

[[UIColorpurpleColor]set];

[linePathstroke];

}

```

定義一些屬性:

YMSView即為自定義的view,作為新的導(dǎo)航欄,也就類似于一個遮罩的效果

myAlpha 作為修改導(dǎo)航欄的透明度(自定義的view)

mycolor是用來修改導(dǎo)航欄字體的顏色

imageview用來操作的一張圖片

創(chuàng)建屬性

懶加載的形式加載這個自定義的view

/導(dǎo)航欄view

-(YMSView*)myNavView

{

if(_myNavView==nil)

{

//64正好覆蓋住原來的view

YMSView*navView = [[YMSViewalloc]initWithFrame:CGRectMake(0,0, [UIScreenmainScreen].bounds.size.width,64)];

navView.backgroundColor= [UIColorwhiteColor];

navView.alpha=0;

[self.viewaddSubview:navView];

_myNavView= navView;

}

return_myNavView;

}

給當(dāng)前的根view添加拖拽手勢

-(void)addPanGesture

{

UIPanGestureRecognizer*panGesture = [[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(pan:)];

[self.viewaddGestureRecognizer:panGesture];

}

如何才能改變當(dāng)前導(dǎo)航欄的透明度和標(biāo)題顏色呢?

關(guān)節(jié)點就在拖拽手勢的實現(xiàn)中,通過拖拽距離來設(shè)置一個比例,在拖動中來動態(tài)改變

-(void)pan:(UIPanGestureRecognizer*)pan

{

//獲取當(dāng)前拖拽的距離

CGPointloc = [pantranslationInView:pan.view];

//讓view的tansform歸零,否則會一直疊加

[pansetTranslation:CGPointZeroinView:pan.view];

//更新圖片的約束

[_imageViewmas_updateConstraints:^(MASConstraintMaker*make) {

//計算圖片滾動的距離

CGFloatdistance =_imageView.height+ loc.y;

//放置圖片穿透到上面或者下拖拽的時候放大

//判斷滾動的距離

//此處判斷特別重要,這樣能解決拖拽過程中卡頓的現(xiàn)象

防止向下拖拽時放大圖片

if(distance >200)

{

return;

}

make.height.mas_equalTo(distance);

}];

//根據(jù)拖動的距離來改變導(dǎo)航欄的顏色

CGFloatmax =200;

CGFloatmin =64;

//求出顏色變化范圍

CGFloatcover = max - min;

//計算比例

//根據(jù)imageview高度的變化來計算

CGFloatscale =1- (_imageView.height- min)/cover;

//NSLog(@"%lf",_imageView.height);

self.myAlpha= scale;

self.mycolor=1-scale;

}

記得開始定義了一個透明度和顏色的屬性,通過重寫set方法,并在其中改變自定義view的透明度和字體的顏色


//導(dǎo)航欄矩形的透明度修改

-(void)setMyAlpha:(CGFloat)myAlpha

{

_myAlpha= myAlpha;

self.myNavView.alpha= myAlpha;

}

-(void)setMycolor:(CGFloat)mycolor

{

_mycolor= mycolor;

//設(shè)置文字的顏色

[self.navigationController.navigationBarsetTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColorcolorWithWhite:mycoloralpha:1]}];

//設(shè)置導(dǎo)航欄的渲染顏色

[self.navigationController.navigationBarsetTintColor:[UIColorcolorWithWhite:mycoloralpha:1]];

}

效果圖:


還有很多小細(xì)節(jié)沒有處理好,希望大家看到后能夠指出,一起分享下經(jīng)驗^_^ ?^_^

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容