研究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;
本文来自博客园,作者:赫凯,转载请注明原文链接:https://www.cnblogs.com/heKaiii/p/15491349.html

浙公网安备 33010602011771号