配色: 字号:
iOS7 毛玻璃特效代码
2016-11-08 | 阅:  转:  |  分享 
  
iOS7毛玻璃特效代码

这篇文章主要分享了iOS7毛玻璃特效代码,非常的实用,做IOS开发的童鞋们不要错过了

原图:





效果图:





实现:首先需要导入Accelerate.framework。然后把两个文件加入到自己的项目中即可。UIImage+ImageEffects.h

复制代码代码如下:

#import@interfaceUIImage(ImageEffects)-(UIImage)applyLightEffect;-(UIImage)applyExtraLightEffect;-(UIImage)applyDarkEffect;-(UIImage)applyTintEffectWithColor:(UIColor)tintColor;-(UIImage)applyBlurWithRadius:(CGFloat)blurRadiustintColor:(UIColor)tintColorsaturationDeltaFactor:(CGFloat)saturationDeltaFactormaskImage:(UIImage)maskImage;@end

UIImage+ImageEffects.m

复制代码代码如下:

#import"UIImage+ImageEffects.h"#import#import@implementationUIImage(ImageEffects)-(UIImage)applyLightEffect{UIColortintColor=[UIColorcolorWithWhite:1.0alpha:0.3];return[selfapplyBlurWithRadius:30tintColor:tintColorsaturationDeltaFactor:1.8maskImage:nil];}-(UIImage)applyExtraLightEffect{UIColortintColor=[UIColorcolorWithWhite:0.97alpha:0.82];return[selfapplyBlurWithRadius:20tintColor:tintColorsaturationDeltaFactor:1.8maskImage:nil];}-(UIImage)applyDarkEffect{UIColortintColor=[UIColorcolorWithWhite:0.11alpha:0.73];return[selfapplyBlurWithRadius:20tintColor:tintColorsaturationDeltaFactor:1.8maskImage:nil];}-(UIImage)applyTintEffectWithColor:(UIColor)tintColor{constCGFloatEffectColorAlpha=0.6;UIColoreffectColor=tintColor;intcomponentCount=CGColorGetNumberOfComponents(tintColor.CGColor);if(componentCount==2){CGFloatb;if([tintColorgetWhite:&balpha:NULL]){effectColor=[UIColorcolorWithWhite:balpha:EffectColorAlpha];}}else{CGFloatr,g,b;if([tintColorgetRed:&rgreen:&gblue:&balpha:NULL]){effectColor=[UIColorcolorWithRed:rgreen:gblue:balpha:EffectColorAlpha];}}return[selfapplyBlurWithRadius:10tintColor:effectColorsaturationDeltaFactor:-1.0maskImage:nil];}-(UIImage)applyBlurWithRadius:(CGFloat)blurRadiustintColor:(UIColor)tintColorsaturationDeltaFactor:(CGFloat)saturationDeltaFactormaskImage:(UIImage)maskImage{//Checkpre-conditions.if(self.size.width<1||self.size.height<1){NSLog(@"error:invalidsize:(%.2fx%.2f).Bothdimensionsmustbe>=1:%@",self.size.width,self.size.height,self);returnnil;}if(!self.CGImage){NSLog(@"error:imagemustbebackedbyaCGImage:%@",self);returnnil;}if(maskImage&&!maskImage.CGImage){NSLog(@"error:maskImagemustbebackedbyaCGImage:%@",maskImage);returnnil;}CGRectimageRect={CGPointZero,self.size};UIImageeffectImage=self;BOOLhasBlur=blurRadius>__FLT_EPSILON__;BOOLhasSaturationChange=fabs(saturationDeltaFactor-1.)>__FLT_EPSILON__;if(hasBlur||hasSaturationChange){UIGraphicsBeginImageContextWithOptions(self.size,NO,[[UIScreenmainScreen]scale]);CGContextRefeffectInContext=UIGraphicsGetCurrentContext(www.hunanwang.net);CGContextScaleCTM(effectInContext,1.0,-1.0);CGContextTranslateCTM(effectInContext,0,-self.size.height);CGContextDrawImage(effectInContext,imageRect,self.CGImage);vImage_BuffereffectInBuffer;effectInBuffer.data=CGBitmapContextGetData(effectInContext);effectInBuffer.width=CGBitmapContextGetWidth(effectInContext);effectInBuffer.height=CGBitmapContextGetHeight(effectInContext);effectInBuffer.rowBytes=CGBitmapContextGetBytesPerRow(effectInContext);UIGraphicsBeginImageContextWithOptions(self.size,NO,[[UIScreenmainScreen]scale]);CGContextRefeffectOutContext=UIGraphicsGetCurrentContext();vImage_BuffereffectOutBuffer;effectOutBuffer.data=CGBitmapContextGetData(effectOutContext);effectOutBuffer.width=CGBitmapContextGetWidth(effectOutContext);effectOutBuffer.height=CGBitmapContextGetHeight(effectOutContext);effectOutBuffer.rowBytes=CGBitmapContextGetBytesPerRow(effectOutContext);if(hasBlur){//AdescriptionofhowtocomputetheboxkernelwidthfromtheGaussian//radius(akastandarddeviation)appearsintheSVGspec:////Forlargervaluesof''s''(s>=2.0),anapproximationwww.visa158.comcanbeused:Three//successivebox-blursbuildapiece-wisequadraticconvolutionkernel,which//approximatestheGaussiankerneltowithinroughly3%.////letd=floor(s3sqrt(2pi)/4+0.5)////...ifdisodd,usethreebox-blursofsize''d'',centeredontheoutputpixel.//CGFloatinputRadius=blurRadius[[UIScreenmainScreen]scale];NSUIntegerradius=floor(inputRadius3.sqrt(2M_PI)/4+0.5);if(radius%2!=1){radius+=1;//forceradiustobeoddsothatthethreebox-blurmethodologyworks.}vImageBoxConvolve_ARGB8888(&effectInBuffer,&effectOutBuffer,NULL,0,0,radius,radius,0,kvImageEdgeExtend);vImageBoxConvolve_ARGB8888(&effectOutBuffer,&effectInBuffer,NULL,0,0,radius,radius,0,kvImageEdgeExtend);vImageBoxConvolve_ARGB8888(&effectInBuffer,&effectOutBuffer,NULL,0,0,radius,radius,0,kvImageEdgeExtend);}BOOLeffectImageBuffersAreSwapped=NO;if(hasSaturationChange){CGFloats=saturationDeltaFactor;CGFloatfloatingPointSaturationMatrix[]={0.0722+0.9278s,0.0722-0.0722s,0.0722-0.0722s,0,0.7152-0.7152s,0.7152+0.2848s,0.7152-0.7152s,0,0.2126-0.2126s,0.2126-0.2126s,0.2126+0.7873s,0,0,0,0,1,};constint32_tdivisor=256;NSUIntegermatrixSize=sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]);int16_tsaturationMatrix[matrixSize];for(NSUIntegeri=0;i
调用:

复制代码代码如下:

UIImageViewme=[[UIImageViewalloc]initWithFrame:CGRectMake(10,480,614,381)];[mesetImage:[[UIImageimageNamed:@"me.png"]applyBlurWithRadius:5tintColor:[UIColorcolorWithWhite:1alpha:0.2]saturationDeltaFactor:1.8maskImage:nil]];[self.viewaddSubview:me];

ok!Soeasy!























献花(0)
+1
(本文系白狐一梦首藏)