IOS8的新特性:简洁易用的毛玻璃效果

探寻IOS8的新亮点:毛玻璃效果的简易实现

IOS8之前,apple官方并不建议开发者使用类似毛玻璃的模糊效果,也并没有开放相关的接口,大部分的开发者是通过转化CGImage这个类来实现毛玻璃的模糊效果,并且实现的效果也很优秀。在IOS8之后,苹果官方新出了一个类UIVisualEffectView,通过这个类,实现毛玻璃效果变得轻而易举,而且效率非常之高,下面,我们来介绍下这个类的简单用法。

一、了解几个类

1、UIVisualEffectView

这个类为我们提供了一个方便的接口,用来展示复杂的图像效果。

2、UIVisualEffect

官方对这个类的解释相当简单,它没有任何方法,只是充当一个帮助UIVisualEffectView创建的对象,是UIBlurEffect和UIVibrancyEffect的父类,或者可以理解,它的功能相当于一个抽象类。

3、UIBlurEffect

这个类是创建模糊效果,也就是毛玻璃效果的类,可以设置风格。

4、UIVibrancyEffect

从这个类的名字就可以看出,这个类是UIBlurEffect的扩展,可以创建出明亮的标签的按钮。

二、开始创建虚化的背景

首先,初始化一个UIVisualEffectView对象:

- (instancetype)initWithEffect:(UIVisualEffect *)effect;

这个方法里面的参数是UIVisuaEffect对象,我们先用UIBlueEffect的方式来创建:

+ (UIBlurEffect *)effectWithStyle:(UIBlurEffectStyle)style;

这个方法可以设置一个风格参数,风格枚举如下:

?


1

2

3

4

5

typedef NS_ENUM(NSInteger, UIBlurEffectStyle) {

    UIBlurEffectStyleExtraLight,//高亮的风格

    UIBlurEffectStyleLight,//亮化的风格

    UIBlurEffectStyleDark//暗化的风格

} ;

这些都做好之后,我们需要给这个UIVisualEfffectView对象一个frame,然后直接加到我们想要虚化的背景上,总体代码如下:

?


1

2

3

4

5

6

7

8

9

  UIImageView * view = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

    UIImage * img = [UIImage imageNamed:@"1.jpg"];

    UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]];

    //设置虚化度

    effectView.alpha=1.0;

    effectView.frame=CGRectMake(0, 0, self.view.frame.size.width, 200);

    view.image=img;

    [view addSubview:effectView];

    [self.view addSubview:view];

效果如下:

三、UIVisualEffectView的几个属性

@property (nonatomic, retain, readonly) UIView *contentView;

这个参数和我们后面将要说的创建明亮的标签和按钮有关,这里先不多介绍。

@property (nonatomic, copy, readonly) UIVisualEffect *effect;

获得UIVissualEffect对象

@property(nonatomic)                 CGFloat           alpha; 

这个参数和虚化的程度有关

四、在虚化的背景上创建颜色绚丽的标签

我们先来看一个效果,我们在刚才创建的虚化的背景上添加一个标签,代码如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

UILabel * view2 = [[UILabel alloc]init];

    view2.text=@"注意看字体的颜色!";

    view2.font=[UIFont boldSystemFontOfSize:32];

    view2.frame=CGRectMake(0, 0,300, 100);

    UIImageView * view = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

    UIImage * img = [UIImage imageNamed:@"1.jpg"];

    UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight]];

    [effectView addSubview:view2];

    effectView.alpha=0.8;

    effectView.frame=CGRectMake(0, 0, self.view.frame.size.width, 200);

    view.image=img;

    [view addSubview:effectView];

    [self.view addSubview:view];

效果如下:

我们换另一种虚化效果来对背景进行虚化:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

UILabel * view2 = [[UILabel alloc]init];

    view2.text=@"注意看字体的颜色!";

    view2.font=[UIFont boldSystemFontOfSize:32];

    view2.frame=CGRectMake(0, 0,300, 100);

    UIImageView * view = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

    UIImage * img = [UIImage imageNamed:@"1.jpg"];

    UIVisualEffectView * effectView = [[UIVisualEffectView alloc]initWithEffect:[UIVibrancyEffect effectForBlurEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]];

    [effectView.contentView addSubview:view2];

    effectView.alpha=0.8;

    effectView.frame=CGRectMake(0, 0, self.view.frame.size.width, 200);

    view.image=img;

    [view addSubview:effectView];

    [self.view addSubview:view];

效果如下:

现在可以很明白的了解,UIBlurEffect是对整个背景进行虚化,UIVibrancyEffect是对添加的标签等附件进行背景虚化。注意,这些附件,必须加在UIVisualEffectView的contentView里,否则将不起任何作用。

五、一个小控件

通过上面的介绍,我们可以发现,在IOS8中创建一个毛玻璃效果是如此的容易,apple官方提供的类也是如此的强大,我们很轻松就可以实现实时变化虚化程度的动画效果,这在以前是非常麻烦和低效的。但是apple还有一个忠告:莫要泛滥的使用虚化,导致很差的用户体验!

最后,和大家分享一个前两天写的小控件,实现的效果是仿IOS8中在桌面下拉会是背景渐变虚化,从顶部会滑出搜索框。如下:可以当做一个demo来参考。

链接地址:http://d.cocoachina.com/code/detail/297393

时间: 2024-08-30 21:08:52

IOS8的新特性:简洁易用的毛玻璃效果的相关文章

开发者所需要知道的 iOS8 SDK 新特性

WWDC 2014 已经过去一个多月.最激动人心的莫过于 Swift 这门新语言的发布,我在之前已经写了一些关于这么语言的第一印象和一些初步的探索.在写这篇文章的时候,Swift 随着 beta 3 得到了重大的更新,而这门语言现在也还在剧烈的变化之中.对于 Swift,现在大家的探索才刚刚上路,很多背后的机制还并不是非常清楚,或者有可能发生巨大的变化,因此在这里和之后的几篇文章,直到稳定的 1.0 版本出现,我不再打算继续深入针对 Swift 写什么文章.这基本出于对未来可能的变化会容易误导读

iOS8新特性扩展(Extension)应用之二——分享插件

iOS8新特性扩展(Extension)应用之二--分享插件         在上一篇博客中,介绍了iOS8新特性扩展功能之一的Today功能:http://my.oschina.net/u/2340880/blog/485533,这里我们再介绍一下分享的扩展功能.       在iOS8之前,除了一些主流的社交平台,例如苹果支持内容分享外,其他开发者的应用若要加入分享的功能,将会十分的复杂.在iOS8的新特性中,apple为我们准备了这样的扩展功能. 首先创建工程,在我们的工程中新建一个Tar

jQuery 1.4:15个新特性和优化增强

jQuery 1.4 最近发布了. 超乎大家的预期,这次并非简单的修修补补,1.4 包含了很多新特性.功能增强和性能提升!本文即向您介绍这些可能对你十分有用的新特性和优化增强. 你可以立刻下载jQuery 1.4试用: http://code.jquery.com/jquery-1.4.js 1. 传参给 jQuery(-) 之前,jQuery可以通过 attr 方法设置元素的属性,既可传属性的名和值,也可以是包含几组特定 属性名值对 的 对象.在 jQuery 1.4 中,你可以把一个参数对象

jQuery 1.4 版本的十五个新特性-转载

jQuery 1.4 最近发布了. 超乎大家的预期,这次并非简单的修修补补,1.4 包含了很多新特性.功能增强和性能提升!本文即向您介绍这些可能对你十分有用的新特性和优化增强. 你可以立刻下载jQuery 1.4试用: http://code.jquery.com/jquery-1.4.js 1. 传参给 jQuery(-) 之前,jQuery可以通过 attr 方法设置元素的属性,既可传属性的名和值,也可以是包含几组特定 属性名值对 的 对象.在 jQuery 1.4 中,你可以把一个参数对象

iOS8新特性扩展(Extension)应用之四——自定义键盘控件

iOS8新特性扩展(Extension)应用之四--自定义键盘控件         iOS8系统的开放第三方键盘,使得用户在输入法的选择上更加自主灵活,也更加贴近不同语言的输入风格.这篇博客,将介绍如何开发一个第三方的键盘控件. 一.了解UIInputViewController类         UIInputViewController是系统扩展支持键盘扩展的一个类,通过这个类,我们可以自定义一款我们自己的键盘提供给系统使用.         首先,我们先来看一下这个类中的一些属性和方法:

iOS8新特性扩展(Extension)应用之三——照片编辑插件

iOS8新特性扩展(Extension)应用之三--照片编辑插件         通过前几篇博客的介绍,我们了解到扩展给app提供的更加强大的交互能力,这种强大的交互能力另一方面体现在照片编辑插件的应用.        和通常一样,我们先创建一个工程,然后新建一个Target,选择photo editing: 从模板中,我们可以看到系统为我们创建了一个controller,这个controller就是用于处理照片的controller,其中方法如下: ? 1 2 3 4 5 6 7 8 9 10

iOS8新特性扩展(Extension)应用之一——Today扩展

iOS8新特性扩展(Extension)应用之一--Today扩展 一.理解扩展 1.简介         基于iOS系统的安全性考虑,其应用的数据存储是通过沙盒模式进行的,要实现应用之间的数据共享十分困难,功能共享就更加棘手.在iOS8系统中,apple为我们提供了一个革命性的功能:扩展.我们可以通过扩展来使app间数据甚至功能进行共享. 2.几种扩展模式 (1)今日视图扩展:today         这个扩展也被叫做 widget.该扩展可以将今日发生的简短消息放到消息中心的「今日」视图里

ios8新特性:pushkit实战总结(voip开发者必读)

Question:pushkit是什么? Answer:ios8苹果新引入了名为pushkit的框架和一种新的push通知类型,被称作voip push.该push方式旨在提供区别于普通apns push的能力,通过这种push方式可以使app执行制定的代码(在弹出通知给用户之前):而该通知的默认行为和apns通知有所区别,它的默认行为里面是不会弹出通知的.目前来看push kit的用途还局限于voip push(根据笔者的实战经验来看,其他类型的push暂时不能够起作用,sdk也正处于演进中)

WWDC 2013 Session笔记 - Xcode5和ObjC新特性

这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或使用,但是还烦请保留原文链接,谢谢您的理解合作.如果您觉得本站对您能有帮助,您可以使用RSS或邮件方式订阅本站,这样您将能在第一时间获取本站信息. 本文涉及到的WWDC2013 Session有 Session 400 What's New in Xcode 5 Session 401 Xcode Core Concepts Session 407 Debugging wi