在 iOS 7 出來一個背景模糊的效果, Apple 官方的 sample code 則有提供怎麼使用 vImage, Quartz 來實作這個效果。接著在 iOS 8 出來之後,則提供了  UIVisualEffectView 可以疊加在繼承  UIView 的 class 的 objects ,除了  UIView 之外就還有 UIImageView 等比較常用會用來加上模糊效果,因此可以更加容易達到這個效果。

Bluring Images on iOS 7

Apple 提供了一個 sample code 可以拿來用:  Blurring and Tinting an Image 。 Implementation 在  UIImageEffects/UIImageEffects.m 這個檔案裡,從他的 header file 則可以看出可以怎麼使用這些效果。

實作細節

從 sample code 中可以看出來, 實作上利用三次 box blur 來接近高斯模糊的效果,速度上也比較快。相關的原理可以看這個連結:  Filter primitive ‘feGaussianBlur’

怎麼用

我有把這兩個實作主要的檔案抽出來成為一個 pod ,可以在 Podfile 加入下方程式碼後執行  pod install :

 
pod 'UIImageBlurEffectCategory', :git => 'https://github.com/vc7/UIImageBlurEffectCategory.git'

接著引入 header file :

 
#import <UIImageBlurEffectCategory/UIImageBlurEffectCategory.h>

我把 code 改成使用  UIImage category ,以提供擴充 class methods 的方式來使用。舉例來說,如果要產生一個簡單模糊過的圖像,就用以下的方式即可:

 
UIImage *bluredImage = [UIImage imageByApplyingLightEffectToImage:[UIImage imageNamed:@"myImage.jpg"]];

原先提供的 sample code 提供了比較大的變化空間,有比較多的參數( blur radius, tint color, saturation delta factor 以及 mask image )可以調整模糊的效果,到 iOS 8 還是可以使用。

iOS 8, UIVisualEffectView

在過去,若是要對一個 view 模糊,需要繪製出那個 view 的快照,接著對他 apply 模糊,再加到一個 UIImageView 中顯示出來。

在 iOS 8 之後, UIKit 則提供了簡單的方式來達成模糊的效果,簡單幾個步驟就可以直接模糊 UIView instances 。

簡易流程

Objective-C

 
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

visualEffectView.frame = imageView.bounds

[imageView addSubview:visualEffectView];

Swift

 
var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView

visualEffectView.frame = imageView.bounds

imageView.addSubview(visualEffectView)

UIBlurEffect 的種類

UIBlurEffect 的種類則有以下幾種可以使用:

  • UIBlurEffectStyleExtraLight – 模糊後加入和模糊對象相比更明亮的色相( Hue )調整效果
  • UIBlurEffectStyleLight – 模糊後加入和模糊對象相等的色相調整效果
  • UIBlurEffectStyleDark – 模糊後加入和模糊對象相比更暗色的色相調整效果

以下是分別的效果展示,前景加上原圖對照:

結論

原先使用 vImage 的 code 對想要對效果做客製化比較容易達成。而 iOS 8 新增的這個 visual effect 則是提供了最容易的達成方式,怎麼用就端看需求了。

而為了看懂 sample code 也稍微看了一些資料,和一些以前沒接觸過的運算公式,需要花了一些時間消化這些東西。不過花點時間了解他背後是怎麼做到的,也滿有收穫的。

在 iOS 8 中使用模糊效果的更多相关文章

  1. iOS 7中实现模糊效果

    本文译自iOS 7 Blur Effects with GPUImage. iOS 7在视觉方面有许多改变,其中非常吸引人的功能之一就是在整个系统中巧妙的使用了模糊效果.许多第三方应用程序已经采用了这 ...

  2. iOS开发使用半透明模糊效果方法整理

    虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包括今年最新发布的iOS8也沿袭了这一设计,甚至在OS X 10.10版Yosemite中也开 ...

  3. 解析iOS开发中的FirstResponder第一响应对象

    1. UIResonder 对于C#里所有的控件(例如TextBox),都继承于Control类.而Control类的继承关系如下: 代码如下: System.Object System.Marsha ...

  4. [转]iOS开发使用半透明模糊效果方法整理

    转自:http://www.molotang.com/articles/1921.html 虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包 ...

  5. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  6. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  7. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  8. iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法

    "UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...

  9. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

随机推荐

  1. 用VisualSVN做项目版本控制

    一.SVN服务端 1.VisualSVN Server下载: http://download.csdn.net/detail/jiminull/4448874 或 http://www.visuals ...

  2. 再见WCF

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  3. oracle 问题若干 提醒注意

    1.Powerdesigner 里生成sql,在oracle中运行时报错:ORA-00907: 缺失右括号 解决:这样的问题很多时候是因为用了不正确的数据类型造成的.比如写作nvarchar(n),但 ...

  4. (Java)《head first java》值得Java或面向对象基础的新手看。

    看完这本书后本人收获良多. 内容对Java以及面向对象的入门者非常友好. 抽象的内容惯用图解的方法来剖析,通俗易懂 之前看C#入门经典的面向对象时,依然浓浓的一头雾水. (1)很不解为何实例化要写成A ...

  5. Android自定义控件步骤总结

    在android开发中,系统提供给我们的控件不能满足我们的需求,所以我们往往会自定义一些控件,在自定义过程中遵循以下几个步骤: 一.定义一个Class继承于系统View类 二.在xml文件中配置lay ...

  6. 在windows10+word2010中完美使用北大方正word公式输入法总结

    如果在安装输入法时遇到了无法安装的情况,请首先百度下VC运行库安装下(32位64位都安就是),然后安装北大方正word公式输入法,此时不会再提示无法安装,接着(关键)在word应用程序图标右键-> ...

  7. 查表法计算CRC16校验值

    CRC16是单片机程序中常用的一种校验算法.依据所采用多项式的不同,得到的结果也不相同.常用的多项式有CRC-16/IBM和CRC-16/CCITT等.本文代码采用的多项式为CRC-16/IBM: X ...

  8. uva 11916 Emoogle Grid

    题意:用K种颜色给一个N*M的格子涂色.其中有B个格子是不能涂色的.涂色时满足同一列上下紧邻的两个格子的颜色不同.所有的涂色方案模100000007后为R.现在给出M.K.B.R,求一个最小的N,满足 ...

  9. 国外程序员整理的Java资源

    好资料,慢慢学习.http://www.importnew.com/14429.html 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理, ...

  10. Good practice release jar to Nexus

    Step  suppose you need to develop a feature,when you finish the feature ,you need to release the jar ...