研究IOS毛玻璃的效果

来源:互联网 发布:linux软碟通 编辑:程序博客网 时间:2024/05/17 03:45

我抄了源码,其实就是一个中值模糊//  UIImage+Blur.m//  NZAlertView////  Created by Bruno Furtado on 20/12/13.//  Copyright (c) 2013 No Zebra Network. All rights reserved.//#import "UIImage+BlurGlass.h"@implementation UIImage (Blur)- (UIImage*)blurredImage:(CGFloat)blurAmount{           int boxSize = (int)(blurAmount);    boxSize = boxSize - (boxSize %2) +1;        CGImageRef img =self.CGImage;       vImage_Buffer inBuffer, outBuffer;    vImage_Error error;       void *pixelBuffer;       CGDataProviderRef inProvider =CGImageGetDataProvider(img);   CFDataRef inBitmapData =CGDataProviderCopyData(inProvider);        inBuffer.width =CGImageGetWidth(img);    inBuffer.height =CGImageGetHeight(img);    inBuffer.rowBytes =CGImageGetBytesPerRow(img);        inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);        pixelBuffer = malloc(CGImageGetBytesPerRow(img) *CGImageGetHeight(img));        outBuffer.data = pixelBuffer;    outBuffer.width =CGImageGetWidth(img);    outBuffer.height =CGImageGetHeight(img);    outBuffer.rowBytes =CGImageGetBytesPerRow(img);        error =vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0, 0, boxSize, boxSize,NULL, kvImageEdgeExtend);       if (!error) {        error =vImageBoxConvolve_ARGB8888(&outBuffer, &inBuffer,NULL,0,0, boxSize, boxSize, NULL, kvImageEdgeExtend);               if (!error) {            error =vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0, boxSize, boxSize, NULL, kvImageEdgeExtend);        }    }        CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();       CGContextRef ctx =CGBitmapContextCreate(outBuffer.data,                                             outBuffer.width,                                             outBuffer.height,                                            8,                                             outBuffer.rowBytes,                                             colorSpace,                                             (CGBitmapInfo)kCGImageAlphaNoneSkipLast);        CGImageRef imageRef =CGBitmapContextCreateImage (ctx);       UIImage *returnImage = [UIImageimageWithCGImage:imageRef];        CGContextRelease(ctx);    CGColorSpaceRelease(colorSpace);       free(pixelBuffer);   CFRelease(inBitmapData);        CGColorSpaceRelease(colorSpace);   CGImageRelease(imageRef);       return returnImage;}@end

然而,ios人家官方就有一个类似咱们navbar背景那样子的效果,蒙层做的很自然,很厉害。上代码

    // 创建需要的毛玻璃特效类型    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];    // 毛玻璃view视图    UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];    // 添加到要有毛玻璃特效的控件中    effectView.frame = self.imageV.bounds;    [self.imageV addSubview:effectView];    // 设置模糊透明度    effectView.alpha = .8f;



0 0
原创粉丝点击