iOS 實現毛玻璃效果

来源:http://www.cnblogs.com/arvin-sir/archive/2016/01/14/5131358.html
-Advertisement-
Play Games

話說蘋果在iOS7.0之後,很多系統界面都使用了毛玻璃效果,增加了界面的美觀性,比如下圖的通知中心界面;但是其iOS7.0的SDK並沒有提供給開發者實現毛玻璃效果的API,所以很多人都是通過一些別人封裝的框架來實現,後面我也會講到一個;其實在iOS7.0(包括)之前還是有系統的類可以實現毛玻璃效果的...


話說蘋果在iOS7.0之後,很多系統界面都使用了毛玻璃效果,增加了界面的美觀性,比如下圖的通知中心界面;

但是其iOS7.0的SDK並沒有提供給開發者實現毛玻璃效果的API,所以很多人都是通過一些別人封裝的框架來實現,後面我也會講到一個;

其實在iOS7.0(包括)之前還是有系統的類可以實現毛玻璃效果的, 就是 UIToolbar這個類,並且使用相當簡單,幾行代碼就可以搞定.

下麵是代碼實現:

創建一個UIToolbar實例,設置它的frame或者也可以通過添加約束

然後UIToolbar有一個屬性:barStyle,設置對應的枚舉值來呈現毛玻璃的樣式,最後再添加到需要進行毛玻璃效果的view上即可.

 1  /*
 2      毛玻璃的樣式(枚舉)
 3      UIBarStyleDefault          = 0,
 4      UIBarStyleBlack            = 1,
 5      UIBarStyleBlackOpaque      = 1, // Deprecated. Use UIBarStyleBlack
 6      UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES
 7     */
 8     UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];
 9     bgImgView.image = [UIImage imageNamed:@"huoying4.jpg"];
10     [self.view addSubview:bgImgView];
11     
12     UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, bgImgView.frame.size.width*0.5, bgImgView.frame.size.height)];
13     toolbar.barStyle = UIBarStyleBlackTranslucent;
14     [bgImgView addSubview:toolbar];

效果圖:

我們再來看看視圖結構:

通過視圖結構可以看到UIToolbar包含了三個子視圖

一個背景圖片和1個背景view,還有1個背景特效view,正是這幾個視圖結合在一起實現了毛玻璃的效果

==================================分割線====================================

在iOS8.0之後,蘋果新增了一個類UIVisualEffectView,通過這個類來實現毛玻璃效果與上面的UIToolbar一樣,而且效率也非常之高,使用也是非常簡單,幾行代碼搞定. UIVisualEffectView是一個抽象類,不能直接使用,需通過它下麵的三個子類來實現(UIBlurEffect, UIVisualEffevt, UIVisualEffectView);

子類UIBlurEffect只有一個類方法,用來快速創建一個毛玻璃效果,參數是一個枚舉,用來設置毛玻璃的樣式,

而UIVisualEffectView則多了兩個屬性和兩個構造方法,用來快速將創建的毛玻璃添加到這個UIVisualEffectView上.

特別註意: 這個類是iOS8.0之後才適用, 所以如果項目要相容iOS7.0的話, 還是要考慮其它的兩種方法了.

下麵來看看實現代碼:

同樣是先快速的實例化UIBlurEffect並設置毛玻璃的樣式,然後再通過UIVisualEffectView的構造方法將UIBlurEffect的實例添加上去

最後設置frame或者是通過添加約束, 將effectView添加到要實現了毛玻璃的效果的view控制項上,效果圖和上面的一樣. 

 1     UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];
 2     bgImgView.image = [UIImage imageNamed:@"huoying4.jpg"];
 3     bgImgView.contentMode = UIViewContentModeScaleAspectFill;
 4     //[bgImgView setImageToBlur: [UIImage imageNamed:@"huoying4.jpg"] blurRadius:20 completionBlock:nil];
 5     bgImgView.userInteractionEnabled = YES;
 6     [self.view addSubview:bgImgView];
 7     
 8     /*
 9      毛玻璃的樣式(枚舉)
10      UIBlurEffectStyleExtraLight,
11      UIBlurEffectStyleLight,
12      UIBlurEffectStyleDark
13      */
14     UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
15     UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect];
16     effectView.frame = CGRectMake(0, 0, bgImgView.frame.size.width*0.5, bgImgView.frame.size.height);
17     [bgImgView addSubview:effectView];

但是我們來看看視圖結構,大家會發現和Toolbar不一樣哦!

其實是因為UIVisualEffectView這個類,構造方法幫我們創建了一個view,而這個view我們給它做了毛玻璃處理,再將其覆蓋到了背景圖之上

==================================分割線====================================

嗯! 最後再來給大家介紹一個國外大神封裝的UIImageView的分類,裡面不管是怎麼實現的,反正使用非常簡單,只要一句代碼就搞定.

下麵先看代碼:

1   UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];
2   //bgImgView.image = [UIImage imageNamed:@"huoying4.jpg"];
3   bgImgView.contentMode = UIViewContentModeScaleAspectFill;
4   // 對背景圖片進行毛玻璃效果處理 參數blurRadius預設是20,可指定,最後一個參數block回調可以為nil
5   [bgImgView setImageToBlur: [UIImage imageNamed:@"huoying4.jpg"] blurRadius:20 completionBlock:nil];
6   bgImgView.userInteractionEnabled = YES;
7   [self.view addSubview:bgImgView];

效果圖:

再來看看添加毛玻璃效果後的視圖結構:

哈哈哈, 大家應該看懂了, 這是直接對背景圖片進行了高斯模糊處理了,其它就不解釋了.

好啦, 反正iOS中要進行毛玻璃效果處理就這幾種方式,看大家的需求,喜歡用哪種就用哪種吧.

上面的demo,包括大神封裝的分類,如果需要詳細的源代碼的話,可以到我的gitHub上Clone啦!有問題歡迎留言一起探討學習.

我的gitHub地址: https://github.com/Kejiasir/EffectViewDemo


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在網頁中,我們可以將JavaScript代碼放在html文件中任何位置,但一般放在head或body標簽裡面。一般來說,
  • 最近測試給了我一大堆BUG,一瞅發現全是IE11的。吐槽一下這個瀏覽器真的比較特立獨行。很多預設的樣式跟別的瀏覽器不同,而且最明顯的一點應該是padding左右內邊距往往比別的瀏覽器大了一倍。但是當需要修改的時候又頭疼了。如果改變原有的padding值,那麼在IE11生效了。別的瀏覽器又有問題了.....
  • CSS代碼重構的目的我們寫CSS代碼時,不僅僅只是完成頁面設計的效果,還應該讓CSS代碼易於管理,維護。我們對CSS代碼重構主要有兩個目的:1、提高代碼性能2、提高代碼的可維護性提高代碼性能提高CSS代碼性能主要有兩個點:1、提高頁面的載入性能提高頁面的載入性能,簡單說就是減小CSS文件的大小,提高...
  • 一、概述銀聯手機支付控制項(以下簡稱支付控制項),主要為合作商戶的手機客戶端或手機Web網站提供安全、便捷的支付服務。目前支付控制項支持Android和iOS兩個平臺,用戶通過在支付控制項中輸入銀行卡卡號、手機號、密碼(借記卡和預付卡)或者CVN2、有效期(信用卡)、驗證碼等要素完成支付。二、支付流程介紹通...
  • //改變圖片的亮度方法 0--原樣 >0---調亮 <0---調暗 private void changeLight(ImageView imageView, int brightness) { ColorMatrix cMatrix = new ColorMatrix();...
  • 一、什麼是Quartz2DQuartz 2D是⼀個二維繪圖引擎,同時支持iOS和Mac系統Quartz 2D能完成的工作:繪製圖形 : 線條\三角形\矩形\圓\弧等 繪製文字繪製\生成圖片(圖像)讀取\生成PDF 截圖\裁剪圖片 自定義UI控制項二、Quartz2D在iOS開發中的價值為了便於搭建美觀...
  • 1.cell的重用 所謂的cell的重用就是,視圖載入的時候只會創建當前視圖中的cell,或者比當前視圖多一點的cell,當視圖滾動的時候,滾出屏幕的cell會放進緩存中,滾進屏幕的cell會根據Identifier從緩存中獲取cell,如此的迴圈往複,這樣只會創建固定的cell對象,節省了記憶體。下...
  • 前言:我發現我標題取的不好,誰幫我取個承接上下文的標題?評論一下,我改項目需求:在程式開發中,我們需要在某個程式裡面發送一些簡訊驗證(不是接收簡訊驗證,關於簡訊驗證,傳送門:http://www.cnblogs.com/wolfhous/p/5096774.html項目實現:------------...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...