国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS實現簡易的導航欄顏色漸變實例代碼

iOS實現簡易的導航欄顏色漸變實例代碼

2021-05-17 16:15六號先生117 IOS

很多APP 都有導航欄顏色漸變的效果,下面這篇文章主要給大家介紹了關于iOS如何實現簡易的導航欄顏色漸變效果的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧

前言

很多app首頁要做成類似天貓和京東的導航欄,實現在頁面滑動過程中導航欄漸變的效果。筆者之前在項目里用過一個三方,后來更新版本失效了,于是決定結合自己對導航欄的認識來實現一下這個功能。完成一個簡易的ios導航欄顏色漸變方案。

【文末附運行效果及demo】,下面話不多說了,來一起看看詳細的介紹吧

思考與原理

如何給導航欄設置顏色?

?
1
2
3
4
5
//方法一
self.navigationcontroller.navigationbar.backgroundcolor = [uicolor redcolor];
 
//方法二
[self.navigationcontroller.navigationbar setbackgroundimage:[uiimage imagenamed:@"red.png"] forbarmetrics:uibarmetricsdefault];

以上兩個方法都可以為導航欄添加顏色,但是方法一的效果并非此處所需。

iOS實現簡易的導航欄顏色漸變實例代碼

直接設置背景色的效果

原因在于 uinavigationbar 的結構中添加了 uiview 、 uiimageview 、 uilabel等控件,覆蓋了 uinavigationbar 。

方法二的效果符合預期。

iOS實現簡易的導航欄顏色漸變實例代碼

uinavigationbar結構圖

如何將顏色轉換為圖片?

直接貼代碼并附上注釋:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- (uiimage *)imagewithcolor:(uicolor *)color {
 
 //創建1像素區域并開始圖片繪圖
 cgrect rect = cgrectmake(0, 0, 1, 1);
 uigraphicsbeginimagecontext(rect.size);
 
 //創建畫板并填充顏色和區域
 cgcontextref context = uigraphicsgetcurrentcontext();
 cgcontextsetfillcolorwithcolor(context, [color cgcolor]);
 cgcontextfillrect(context, rect);
 
 //從畫板上獲取圖片并關閉圖片繪圖
 uiimage *image = uigraphicsgetimagefromcurrentimagecontext();
 uigraphicsendimagecontext();
 
 return image;
}

如何在滑動時為導航欄設置背景?

通常展示信息頁面都存在滑動視圖(uitableview 、 uicollectionview 等),這就不難想到可以在滑動視圖的 scrollviewdidscroll 這個方法里根據滑動視圖縱向偏移量來計算顏色的透明度的。

實現

除了以上的問題思考和基本原理,實際實現過程中還有一些需要注意的內容。

導航欄的隱藏與顯示

當頁面下拉時隱藏導航欄,方法有兩個:

?
1
2
3
4
5
//方法一:
[self.navigationcontroller setnavigationbarhidden:yes];
 
//方法二:
self.navigationcontroller.navigationbar.hidden = yes;

以上兩個方法效果相同,區別在于一個是操作 navigationcontroller 的屬性(navigationbar 是 navigationcontroller的一個屬性),一個是操作navigationbar的屬性。

但是,方法一會出現一個bug,就是當頁面初始狀態時 setnavigationbarhidden 為 yes,也就相當于 navigationbar 那一刻是不存在的,那么導航欄上的控件也就自然看不到,而且 navigationbar的出現和消失會很突兀。

采用方法二效果會好很多,因為navigationbar本身是存在的,只是做了顯示和隱藏的操作,過渡也相對順滑很多。

頁面切換的處理

導航欄作為的公共區域,我們可以對它進行自定義,同時也要考慮當前頁面的導航欄和其他頁面導航欄之間的相互影響。

  • 導航欄下面那條線其實是一張圖片,叫做 shadowimage,在 viewwillappear對其隱藏,又在 viewwilldisappear對其做了還原。
  • 頁面即將呈現時防止其他頁面回來其他頁面設置的導航欄背景色對本頁面造成影響,在 viewwillappear 對導航欄背景色先做了置空處理。
  • 為了保證回到該頁面時導航欄的顏色和離開時保持一致,在頁面即將呈現時手動調了一下 scrollviewdidscroll 方法來計算當前應該呈現的顏色。

封裝

為了方便使用,封裝一個 uinavigationbar的category: uinavigationbar+changecolor。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//uinavigationbar+changecolor.m文件
 
//核心方法
- (void)changecolor:(uicolor *)color withoffsety:(cgfloat)offsety {
 
 if (offsety < 0) {
 
 //下拉時導航欄隱藏
 self.hidden = yes;
 }else {
 
 self.hidden = no;
 //計算透明度,180為隨意設置的偏移量臨界值
 cgfloat alpha = offsety / 180 > 1.0f ? 1 : (offsety / 180);
 
 //設置一個顏色并轉化為圖片
 uiimage *image = [self imagewithcolor:[color colorwithalphacomponent:alpha]];
 [self setbackgroundimage:image forbarmetrics:uibarmetricsdefault];
 
 self.translucent = alpha >= 1.0f ? no : yes;
 }
}

使用方法:

  • star:隱藏導航欄下的橫線,將背景色置空,一般在viewwillappear中調用,;
  • changecolor:withscrollview:andvalue: :傳入顏色、滑動視圖、臨界值來實現,一般在 scrollviewdidscroll中調用;
  • reset:顯示導航欄下橫線,還原導航欄,一般在 viewwilldisappear中調用。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//vc.m文件
 
/* 頁面即將顯示 */
- (void)viewwillappear:(bool)animated {
 [super viewwillappear:animated];
 
 [self.navigationcontroller.navigationbar start];
 
 //該頁面呈現時手動調用計算導航欄此時應當顯示的顏色
 [self scrollviewdidscroll:_tableview];
}
 
/* 頁面即將消失 */
- (void)viewwilldisappear:(bool)animated {
 [super viewwilldisappear:animated];
 
 [self.navigationcontroller.navigationbar reset];
}
 
/* 滑動過程中做處理 */
- (void)scrollviewdidscroll:(uiscrollview *)scrollview {
 [self.navigationcontroller.navigationbar changecolor:[uicolor redcolor] withoffsety:scrollview.contentoffset.y];
}

效果展示

完整demo

總結

  • 由于系統自帶的導航欄經常不能滿足需求,因此在開發中導航欄經常需要自定義,哪怕只是修改背景色。
  • 了解導航欄的結構處理起來會更容易。
  • 自定義導航欄也要考慮和其他頁面的導航欄之間的相互影響。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.jianshu.com/p/10c71cb19b5e

延伸 · 閱讀

精彩推薦
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
主站蜘蛛池模板: 国产一区二区精品在线观看 | 日韩在线字幕 | 一区二区三区在线播放 | 看黄免费 | 黄色高清网站 | 亚洲成人精品久久久 | 欧美亚洲91 | 久久久久久久久久久九 | 99re免费视频精品全部 | 国产一区在线不卡 | 欧美一级一区 | 欧美中文字幕一区二区三区亚洲 | 精品网| 337p亚洲欧洲 | 国产99久久久精品视频 | 久久9色 | 久久久91| 嫩草影院黄色 | 国产精品国产三级国产aⅴ中文 | 黄色片视频免费看 | 少妇看av一二三区 | 午夜国产视频 | 亚洲综合国产 | 亚洲国产日韩欧美 | 亚洲a网 | 久久久区| www.天天操| 精品免费国产 | 国产精品第一国产精品 | 一区二区福利 | 日日摸夜夜添夜夜添精品视频 | 成人爽视频 | 一级毛片免费完整视频 | 欧美精品一区二区久久 | 国产在线中文字幕 | 久久最新| 日本不卡一二三区 | 凹凸日日摸日日碰夜夜爽孕妇 | 欧美精品影院 | 久久99一区二区 | 天堂99x99es久久精品免费 |