研究IOS毛玻璃的效果

我抄了源码,其实就是一个中值模糊

//  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;



posted @ 2015-08-20 13:18  赫凯  阅读(24)  评论(0)    收藏  举报