我遇到了麻烦试图在我的iOS应用模糊画面的一部分。 对于什么,我试图做的更好的办法请参阅图像。
在“BlurBox”只有内容必须是模糊的,但其余的可以是清楚的。 所以,如果你在看表视图,只有BlurBox下面的内容将是模糊的(即使你滚动)。 其余的看起来清晰。
我的第一个方法是调用UIGraphicsGetImageFromCurrentImageContext()
每.01s得到所有层下的BlurBox捣成泥成一个图像。 然后是模糊的图像,并显示它在一切的。
我已经试过了模糊的方法是:
https://github.com/tomsoft1/StackBluriOS
https://github.com/coryleach/UIImageAdjust
https://github.com/esilverberg/ios-image-filters
https://github.com/cmkilger/CKImageAdditions
[layer setRasterizationScale:0.25];
[layer setShouldRasterize:YES];
还有一些自定义的尝试。 我也看了苹果的GLImageProcessing ,但我认为这是什么,我想在这里做的有点矫枉过正。
问题是,他们都将 放缓 。 该应用程序不会在App Store所以我愿意用任何私人/无证框架。
有种遥远的想法我是重写drawRect
所有我使用(UITableViewCells,UITableView的,等等)的组件的方法和动态模糊独立每个人。 然而这将需要一些时间,这是否甚至听起来像一个可行的选择?
更新 :
我曾尝试使用CIFilters
如下:
CIImage *inputImage = [[CIImage alloc] initWithImage:[self screenshot]];
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
[blurFilter setDefaults];
[blurFilter setValue: inputImage forKey: @"inputImage"];
[blurFilter setValue: [NSNumber numberWithFloat:10.0f]
forKey:@"inputRadius"];
CIImage *outputImage = [blurFilter valueForKey: @"outputImage"];
CIContext *context = [CIContext contextWithOptions:nil];
self.bluredImageView.image = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];
这并不工作,但它是慢得令人难以置信。 :(
我看到,当我通过从磁盘加载图像中的一些实现只会模糊。 如果我通过,我使用创建一个UIImage UIGraphicsGetImageFromCurrentImageContext()
这是行不通的。 为什么这会是什么想法?
更新 :
我曾尝试帕特尔的建议如下:
CALayer *backgroundLayer = [CALayer layer];
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
[blurFilter setDefaults];
backgroundLayer.backgroundFilters = [NSArray arrayWithObject:blurFilter];
[[self.view layer] addSublayer:backgroundLayer];
但是,它不工作:(
更新自BOUNTY新增:
我曾设法让BlurBox使用正常工作TomSoft1的stackblur因为他加入的飞行正常化RGBA格式的图像(32位/像素)的能力。 然而,它仍然是相当缓慢。
我有一个计时器调用一个更新每隔0.03秒抢到什么是BlurBox下方的形象,模糊的形象,并在屏幕上显示出来。 我需要提高的BlurBox的“FPS”帮助。