Подтвердить что ты не робот

Как применить размытие к UIView?

Сейчас я создаю приложение для iPhone, которое требует размывания всего UIView. Как я могу это достичь? Я видел эту структуру, но я не думаю, что это работает с UIView. Есть ли альтернативный способ размытия UIView?

UPDATE. Проверьте мой обновленный ответ ниже, добавив большую актуальность с появлением iOS 7 и iOS 8.

4b9b3361

Ответ 1

С момента выпуска iOS 7 этот вопрос получил много хитов, и я подумал, что должен следить за тем, что я закончил делать.

Я лично размыл картинку в то время с помощью фотошопа, но есть много отличных сторонних библиотек, которые делают динамическое и статическое размытие, вот пара:

  • Эта гениальная библиотека занимает слой от UITabBar и применяется к любое представление, чтобы получить собственное размытие iOS 7: https://github.com/JagCesar/iOS-blur/
  • Эта библиотека представляет собой библиотеку размытия в режиме реального времени, в которой происходит размытие любого вида ниже: https://github.com/alexdrone/ios-realtimeblur (как указано qegal)
  • Другой, который делает размытие в реальном времени: https://github.com/nicklockwood/FXBlurView
  • Эта библиотека является той, которую я лично использую и Великой, что позволяет вы должны установить цвет оттенка среди других настроек: https://github.com/ivoleko/ILTranslucentView

Я хотел опубликовать это, потому что вам больше не нужно , чтобы делать скриншоты отдельных кадров или экрана.

iOS 8: С выходом iOS 8 Apple включила встроенный размытый UIView, UIVisualEffectView (<а4 > )

Ответ 2

Это должно сработать. Я прокомментировал код, чтобы помочь вам понять, что происходит:

//To take advantage of CIFilters, you have to import the Core Image framework
#import <CoreImage/CoreImage.h>

//Get a UIImage from the UIView
UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//Blur the UIImage with a CIFilter
CIImage *imageToBlur = [CIImage imageWithCGImage:viewImage.CGImage];    
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"]; 
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"]; 
[gaussianBlurFilter setValue:[NSNumber numberWithFloat: 10] forKey: @"inputRadius"];
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"]; 
UIImage *endImage = [[UIImage alloc] initWithCIImage:resultImage];

//Place the UIImage in a UIImageView
UIImageView *newView = [[UIImageView alloc] initWithFrame:self.view.bounds];
newView.image = endImage;
[self.view addSubview:newView];

Если у вас есть вопросы о коде, просто оставьте его в комментариях.

Примечание. CIGaussianBlur не присутствует в iOS с 5.1, поэтому вы должны найти другой способ размытия представления для устройств 5.x + (благодаря @BradLarson для этого наконечника). Принятый ответ в этот вопрос выглядит многообещающим как замена, а эта библиотека.

Ответ 4

Просто решил использовать этот код.

UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:yourView.bounds];
toolBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 7.0) {
    toolBar.barTintColor = nil;
    toolBar.translucent = YES;
    toolBar.barStyle = UIBarStyleBlack;
}
else
    [toolBar setTintColor:[UIColor colorWithRed:5 green:31 blue:75 alpha:1]];
[yourView insertSubview:toolBar atIndex:0];

Ответ 5

Самый простой способ размытия представления - добавить UIToolbar, просто измените значение альфа, чтобы изменить размытие.

self.toolbar = [[UIToolbar alloc]initForAutoLayout];
[self.view addSubview:self.toolbar];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:0];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:0];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:NAVBAR_HEIGHT];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:0];
self.toolbar.alpha = 0.5;