iOS7毛玻璃特效代码讲解.docx
- 文档编号:26152915
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:7
- 大小:995.93KB
iOS7毛玻璃特效代码讲解.docx
《iOS7毛玻璃特效代码讲解.docx》由会员分享,可在线阅读,更多相关《iOS7毛玻璃特效代码讲解.docx(7页珍藏版)》请在冰豆网上搜索。
iOS7毛玻璃特效代码讲解
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
{
UIColor*tintColor=[UIColorcolorWithWhite:
1.0alpha:
0.3];
return[selfapplyBlurWithRadius:
30tintColor:
tintColorsaturationDeltaFactor:
1.8maskImage:
nil];
}
-(UIImage*)applyExtraLightEffect
{
UIColor*tintColor=[UIColorcolorWithWhite:
0.97alpha:
0.82];
return[selfapplyBlurWithRadius:
20tintColor:
tintColorsaturationDeltaFactor:
1.8maskImage:
nil];
}
-(UIImage*)applyDarkEffect
{
UIColor*tintColor=[UIColorcolorWithWhite:
0.11alpha:
0.73];
return[selfapplyBlurWithRadius:
20tintColor:
tintColorsaturationDeltaFactor:
1.8maskImage:
nil];
}
-(UIImage*)applyTintEffectWithColor:
(UIColor*)tintColor
{
constCGFloatEffectColorAlpha=0.6;
UIColor*effectColor=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};
UIImage*effectImage=self;
BOOLhasBlur=blurRadius>__FLT_EPSILON__;
BOOLhasSaturationChange=fabs(saturationDeltaFactor-1.)>__FLT_EPSILON__;
if(hasBlur||hasSaturationChange){
UIGraphicsBeginImageContextWithOptions(self.size,NO,[[UIScreenmainScreen]scale]);
CGContextRefeffectInContext=UIGraphicsGetCurrentContext();
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),anapproximationcanbeused:
Three
//successivebox-blursbuildapiece-wisequadraticconvolutionkernel,which
//approximatestheGaussiankerneltowithinroughly3%.
//
//letd=floor(s*3*sqrt(2*pi)/4+0.5)
//
//...ifdisodd,usethreebox-blursofsize'd',centeredontheoutputpixel.
//
CGFloatinputRadius=blurRadius*[[UIScreenmainScreen]scale];
NSUIntegerradius=floor(inputRadius*3.*sqrt(2*M_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.9278*s,0.0722-0.0722*s,0.0722-0.0722*s,0,
0.7152-0.7152*s,0.7152+0.2848*s,0.7152-0.7152*s,0,
0.2126-0.2126*s,0.2126-0.2126*s,0.2126+0.7873*s,0,
0,0,0,1,
};
constint32_tdivisor=256;
NSUIntegermatrixSize=sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]);
int16_tsaturationMatrix[matrixSize];
for(NSUIntegeri=0;i saturationMatrix[i]=(int16_t)roundf(floatingPointSaturationMatrix[i]*divisor); } if(hasBlur){ vImageMatrixMultiply_ARGB8888(&effectOutBuffer,&effectInBuffer,saturationMatrix,divisor,NULL,NULL,kvImageNoFlags); effectImageBuffersAreSwapped=YES; } else{ vImageMatrixMultiply_ARGB8888(&effectInBuffer,&effectOutBuffer,saturationMatrix,divisor,NULL,NULL,kvImageNoFlags); } } if(! effectImageBuffersAreSwapped) effectImage=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); if(effectImageBuffersAreSwapped) effectImage=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } //Setupoutputcontext. UIGraphicsBeginImageContextWithOptions(self.size,NO,[[UIScreenmainScreen]scale]); CGContextRefoutputContext=UIGraphicsGetCurrentContext(); CGContextScaleCTM(outputContext,1.0,-1.0); CGContextTranslateCTM(outputContext,0,-self.size.height); //Drawbaseimage. CGContextDrawImage(outputContext,imageRect,self.CGImage); //Draweffectimage. if(hasBlur){ CGContextSaveGState(outputContext); if(maskImage){ CGContextClipToMask(outputContext,imageRect,maskImage.CGImage); } CGContextDrawImage(outputContext,imageRect,effectImage.CGImage); CGContextRestoreGState(outputContext); } //Addincolortint. if(tintColor){ CGContextSaveGState(outputContext); CGContextSetFillColorWithColor(outputContext,tintColor.CGColor); CGContextFillRect(outputContext,imageRect); CGContextRestoreGState(outputContext); } //Outputimageisready. UIImage*outputImage=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); returnoutputImage; } @end 调用: 复制代码代码如下: UIImageView*me=[[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!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iOS7 毛玻璃 特效代码 讲解
![提示](https://static.bdocx.com/images/bang_tan.gif)