关于自定义毛玻璃的随笔(三方使用的翻译)

写项目登录页面的背景图的时候, 要用到毛玻璃, 想要的效果是这样的:

于是我用系统提供的毛玻璃的方法写了出来:

UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
    UIVisualEffectView *visualView = [[UIVisualEffectView alloc] initWithEffect:effect];
    visualView.frame = [[UIScreen mainScreen] bounds];
    [self.backgroundImageView addSubview:visualView];
    visualView.alpha = 0.6;

效果如下:

并不是想要的效果, 然后又试了

UIBlurEffectStyleLight效果如图:然后又试了下extraLight, 也不是想要的效果, 于是乎, 我从网上开始找可以自定义毛玻璃的的三方...终于, 皇天不负有心人.三方的地址:https://github.com/nicklockwood/FXBlurView但是发现里面都是英文, 于是准备翻译一下, 以备以后使用.
FXBlurView是UIView子类,替换iOS 7实时背景模糊效果,但适用于iOS 5以上。它被设计的更快速和更易于使用。FXBlurView提供了两种操作模式:静态,视图呈现时只有一次添加到父视图(尽管它可以通过调用setNeedsDisplay更新或updateAsynchronously:completion:)或动态的,它会尽可能自动重新绘制在一个后台线程。

支持iOS & SDK版本

构建目标——支持iOS 8.4(Xcode 8.4,苹果LLVM 6.1编译器)

最早的部署目标- iOS 7.0的支持

最早的部署目标——iOS 4.3兼容

注:“支持”意味着这个版本的库已经被测试。“兼容”意味着图书馆应工作在这个iOS版本(即它不依赖任何不可用SDK特性),但不再进行兼容性测试,可能需要调整或bug修复以正确运行。

ARC的兼容性

从版本1.3开始,FXBlurView需要ARC。如果你想使用FXBlurView 在一个non-ARC的项目中时,只需在FXBlurView.m这个类添加 -fobjc-arc编译器标志。要做到这一点,去构建阶段目标设置的选项卡,打开Compile Sources,双击FXBlurView.m, 然后在弹出窗口中添加-fobjc-arc。

如果你希望你的整个项目转化成ARC,注释掉FXBlurView.m 中错误的地方, 然后运行Edit> Refactor >Convert to Objective-C ARC …Xcode中的工具,确保您希望使用ARC的所有文件(包括FXBlurView.m)被检查。

安装

使用FXBlurView,把类文件拖拽到你的项目并添加Accelerate框架。您可以创建FXBlurView编程实例,或在Interface Builder中创建它们通过拖拽一个普通UIView到你的viewFXBlurView查看和设置它的类。

如果您使用的是界面构建器(Interface Builder),设置自定义属性的FXBlurView(那些不支持的正则uiview)要么创建一个IBOutlet查看和设置属性在代码中,或在Interface Builder中使用用户定义运行时属性特性(在Xcode 4.2中引入的iOS 5 +)。

UIImage扩展

FXBlurView扩展用户界面图像用以下方法:

- (UIImage *)blurredImageWithRadius:(CGFloat)radius
                         iterations:(NSUInteger)iterations
                          tintColor:(UIColor *)tintColor
这种方法适用于模糊效果并返回结果没有修改原始图像。半径属性控制的程度模糊效果。迭代属性控制的迭代次数。更多的迭代意味着高质量。tintColor是一个可选颜色,将混合合成图像。注意的对tintColor的透明度设置会被忽略。

FXBlurView方法

+(void)setBlurEnabled:(BOOL)blurEnabled;

该方法可用于全球启用/禁用所有FXBlurView实例的模糊效果。这是用于测试,或者如果你想禁用下面模糊在iPhone 4和(与iOS7模糊视图一致性行为)。默认情况下启用模糊。

+(void)setUpdatesEnabled;

+(void)setUpdatesDisabled;

这些方法可用于启用和禁用更新对于所有的动态FXBlurView实例和一个命令。用于禁用更新之前立即执行一个动画,这样FXBlurView的更新不会引起动画的卡顿。调用可以嵌套,但确保启用/禁用调用是平衡,或更新将会永久地启用或禁用。

- (void)updateAsynchronously:(BOOL)async completion:(void (^)())completion;
这种方法可以用来触发一个更新的模糊效果(有用当动态= NO)。异步参数控制是否模糊将重绘在主线程或背景。完成参数是一个可选的回调元件,它将被称为模糊时完成。

-(void)setNeedsDisplay;

从UIView继承,这个方法可以用来触发一个视图的更新(同步)。调用这个方法或多或少相当于调用[view updateAsynchronously:NO completion:NULL]。

FXBlurView属性

@property (nonatomic, getter = isBlurEnabled) BOOL blurEnabled;
这个属性切换为个体FXBlurView实例模糊了。模糊是默认启用。注意,如果您使用+ setBlurEnabled方法禁用模糊那将会覆盖该设置。

@property (nonatomic, getter = isDynamic) BOOL dynamic;
这个属性控制是否FXBlurView更新动态,或者只有一次当视图添加到它的父视图。默认值为YES。注意,如果动态设置为不,你仍然可以迫使视图更新通过调用setNeedsDisplay或updateAsynchronously:completion:完成。动态模糊极其cpu密集型任务,因此你应该禁用动态视图立即执行一个动画之前,以避免卡顿。然而,如果你有多个FXBlurViews屏幕上那么简单的禁用更新使用setUpdatesDisabled方法而不是设置动态属性。

@property (nonatomic, assign) NSUInteger iterations;
模糊迭代的数量。更多的迭代改进了但质量降低了性能。默认为2的迭代。

@property (nonatomic, assign) NSTimeInterval updateInterval;
这个控件之间的时间间隔(以秒为单位)连续更新当FXBlurView在动态模式下操作。这个默认为0,这意味着FXBlurView将尽快更新。这收益最好的帧速率,但也很耗CPU, 这可能导致应用程序的其他性能降低,尤其是在旧设备。要实现这一点,试着增加updateInterval的数值。

@property (nonatomic, assign) CGFloat blurRadius;
这个属性控制模糊效果的半径(点)。默认为40点的半径,这是类似于iOS 7模糊效果。

@property (nonatomic, strong) UIColor *tintColor;
这在一个可选的色调颜色应用于FXBlurView。颜色的RGB分量将混合模糊图像,导致温和的色彩。不同色彩的强度效应,使用光明或黑暗的颜色。对tintColor透明度(alpha)的设置会被忽略。如果您不希望应用色彩,将这个值设置为零或(用户界面颜色clearColor]。请注意,如果您正在使用Xcode 5以上,FXBlurViews接口中创建默认构建器将有一个蓝色的色调。

@property (nonatomic, weak) UIView *underlyingView;
这个属性指定视图FXBlurView将示例创建模糊效果。如果设置为零(默认),这将是模糊视图的父视图本身,但你可以重写它如果你需要的话。

常见问题解答

问:为什么我的观点都框在iOS 7日吗?

a . FXBlurView使用“UIView”“tintColor”属性,不存在于iOS 6和下面,但是在iOS 7日默认为蓝色。只是将此属性设置为‘(用户界面颜色clearColor]“禁用色彩。保留iOS 6兼容,您可以设置使用代码,或通过使用用户定义运行时属性接口生成器的功能,这将覆盖标准“tintColor”值(参见示例项目nib如何做到这一点)。

问:FXBlurView使我的整个应用程序上运行缓慢(旧设备),我能做什么?

答:为了提高性能,尝试增加“updatePeriod”属性,减少“迭代”财产或禁用“动态”,除非你真的需要它。如果一切都失败了,老设备上设置“blurEnabled”没有。

问:我的SpriteKit / OpenGL /视频/ 3 d转换内容显示不正确放置在一个FXBlurView时,为什么不呢?

答:这是一个限制的“CALayer”“renderInContext:”方法用于获取视图的内容。没有解决方案在iOS 6和早些时候。在iOS 7日你可以利用“UIView”“drawViewHierarchyInRect:afterScreenUpdates:”方法来捕获一个视图和应用模糊效果,但这它太慢实时使用,所以FXBlurView默认不使用这种方法。

问:FXBlurView不是捕捉一些普通视图内容,为什么不呢?

答:FXBlurView默认捕捉它的直接父视图的内容。如果父视图是透明或部分透明,背后的内容显示它不会被捕获。您可以覆盖“underlyingView”属性来捕获的内容如果您需要一个不同的视图。

发布说明

1.6.4版本

blurredImageWithRadius:迭代:tintColor:现在如果图像不ARGB格式

固定”:CGContextRestoreGState:无效的上下文0 x0。”

空的子层正在隐藏的快照,以防止renderInContext崩溃之前iOS 8

FXBlurView现在需要时自动使用慢drawViewHierarchyInRect方法捕获的内容

添加了特拉维斯集成

1.6.3版本

FXBlurView图像背景不再是透明/黑色,所以它可以作为一个半透明的叠加

underlyingView属性现在是IBOutlet,所以它可以连接界面构建器

进口进入头迅速更好的兼容性

使用的具体代码如下所示:

- (void)viewDidLoad {

    [super viewDidLoad];

    UIImageView * imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];

    imageView.image = [UIImage imageNamed:@"Default-Port-hd47"];

    [self.view addSubview:imageView];

    FXBlurView * aview = [[FXBlurView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

    aview.tintColor = [UIColor whiteColor];  //前景颜色

    aview.blurRadius = 20.0;                 //模糊半径

    aview.dynamic = YES;                     //动态改变模糊效果    

    [self.view addSubview:aview];

    FXBlurView * bview = [[FXBlurView alloc] initWithFrame:CGRectMake(0, 120, 100, 100)];

    bview.tintColor = [UIColor whiteColor];  //前景颜色

    bview.blurEnabled = YES;                //是否允许模糊,默认YES

    bview.blurRadius = 10.0;               //模糊半径

    bview.dynamic = YES;                   //动态改变模糊效果

    bview.iterations = 2;                  //迭代次数:

    bview.updateInterval = 2.0;            //更新时间(不确定具体功能)

    /*

     blurRadius = 1.0 && dynamic = 100 的效果和 blurRadius = 10.0 && dynamic = 1的效果大致相同

     */    

    [self.view addSubview:bview];

    FXBlurView * cview = [[FXBlurView alloc] initWithFrame:CGRectMake(150, 0, 200, 200)];

    cview.blurRadius = 20.0;

    cview.tintColor = [UIColor whiteColor];

    [self.view addSubview:cview];

}

效果如下:

 
时间: 2024-08-02 19:10:08

关于自定义毛玻璃的随笔(三方使用的翻译)的相关文章

iOS_自定义毛玻璃效果

最终效果图: 关键代码: UIImage分类代码 // // UIImage+BlurGlass.h // 帅哥_团购 // // Created by beyond on 14-8-30. // Copyright (c) 2014年 com.beyond. All rights reserved. // 毛玻璃效果 UIImage分类 #import <UIKit/UIKit.h> @interface UIImage (BlurGlass) /* 1.白色,参数: 透明度 0~1, 0为

自定义Data Service Providers

自定义Data Service Providers 作者:AlexJ 翻译:谈少民 原文链接:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx 简介 Data Services 建立于 Data Service Provider(数据服务提供者)之上,他负责Data Service与数据源之间的通讯. Data Services内置了一些提供者,而且也允许你自定

自定义OpenStack Horizon(Mitaka)

一.写在前面 这篇文章主要介绍了OpenStack Horizon官方介绍自定义配置,从而进行简单的翻译学习,这里主要基于目前最新的Mitaka来说明,提高自己在horizon组件开发方面的理解.因为时间仓促以及个人理解有限,固有错误的地方请指出,后续将会不定期的完善,近期将专门写一篇博文详细介绍自定义开发主题模版,谢谢! 如果转载,请保留作者信息. 邮箱地址:[email protected] 二.主题(Themes) Openstack Kilo 版本以来,OpenStack Dashboa

在Web.config或App.config中的添加自定义配置

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了. 如果你已经对自定义配置了如指掌,请忽略这篇文章.? 言归正传,我们先来看一个最简单的自定义配置 <?xml version="1.0" encoding="utf-8" ?> <configuration>

在Web.config或App.config中的添加自定义配置 &lt;转&gt;

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了. 如果你已经对自定义配置了如指掌,请忽略这篇文章.? 言归正传,我们先来看一个最简单的自定义配置 <?xml version="1.0" encoding="utf-8" ?> <configuration>

前端乱炖,总结一些细节点

总结一下前端方面,自己的一些体会,乱七八糟的整理了一下,暂时就想到了这些,以后会持续更新. 构建工具一定要用,gulp等.使用requireJS.browserify等 js模块管理,bower管理三方库 css: 结构: 使用less,文件结构参考bootstrap less源文件 尽量多分less文件,按照用途.分类等命名,尽量让一个less文件的代码少一点,文件多一点,这样后期好维护和查询 三方库: 使用bower下载三方库,如果有需要修改调整三方库的类,引入三方库的less源文件,覆盖一

magento 翻译使用实例

在自定义的模块中若想要使用翻译,需在config.xml中加入如下配置 <config> <adminhtml> //后台 <translate> <modules> <Jago_translate> <files> <default>test.csv</default> </files> </Jago_translate> </modules> </translate

Unity3D用户手册

Welcome to Unity. 欢迎使用Unity. Unity is made to empower users to create the best interactive entertainment or multimedia experience that they can. This manual is designed to help you learn how to use Unity, from basic to advanced techniques. It can be

django官方文档读书笔记

写在前面:这算是第二次读英文原文文档,第一次是读scrapy,感觉还是要做笔记,好记性不如烂笔头,现在已经忘了scrapy文档讲了什么了,心疼.以后要多读多写 经过半年的基础学习(懒,拖延)终于来到web开发这一步,当时买了董大的web实战,准备是用flask来实现的,但是后面在逼乎上找到某培训班的django视频资源,所以最终还是决定用django. 看过各种对django的评价之后,个人总结django是一个已经高度框架化的框架了(笑),他的每一部分M,V,T都已经帮用户分好了,用户可自主选