2015-07-24 3 views
0

В настоящее время я пытаюсь добавить размытую анимацию на моем представлении для перехода. Я использую каркас GPUImage, который реализует GPUImageGaussianBlurFilter.Размытая анимация изображения с использованием GPUImage

Это работает, но эффект применяется к фильтру недостаточно сильным. Я пытаюсь сыграть с значением filter.blurRadiusInPixels, но, похоже, он не меняет значение, которое я пытаюсь поставить.

Это мой код:

//First I init a ImageView which have the size of the frame of my view 

    UIImageView * blurredArea = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

//hide this imageView for the moment 

      blurredArea.alpha = 0; 

//In this part I take a snapshot of my current view that I keep in snapshot   


UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0); 
       [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
       UIImage * snapshot=UIGraphicsGetImageFromCurrentImageContext(); 
       UIGraphicsEndImageContext(); 

//Finally I init my GaussianFilter on my snapshot 

      GPUImageGaussianBlurFilter * filter = [[GPUImageGaussianBlurFilter alloc] init]; 
      UIImage * blurred = [filter imageByFilteringImage: snapshot]; 

      blurredArea.image = blurred; 

//Here I define the strength of the blur effect but it seems to do nothing whatever the value is putted. 

      filter.blurRadiusInPixels = 1; 

      [self.view addSubview:blurredArea]; 

      [UIView animateWithDuration:0.8f animations:^{ 

//Animate the blurred imageview alpha but not enough blurred. 

       blurredArea.alpha = 1; 
      } 

enter image description here

ответ

0

Я нашел: Значение должно быть ниже 20 и я реорганизовать код.

код:

UIImageView * blurredArea = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
blurredArea.alpha = 0; 

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage * snapshot =UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

GPUImageGaussianBlurFilter * filter = [[GPUImageGaussianBlurFilter alloc] init]; 
filter.blurRadiusInPixels = 12; 
UIImage * blurred = [filter imageByFilteringImage: snapshot]; 
blurredArea.image = blurred; 


[blurredArea addSubview:_frameForLogoAnimation]; 

Результаты выглядят великолепно!

0

я надеюсь, что это помогает ..

если вы хотите применить значение исправить, чем вы можете изменить значение blurRadiusInPixels в GPUImageGaussianBlurFilter.m файл согласно вашему требованию ..

1

Если вы хотите сделать размытие, похожее на размытие iOS в центре уведомлений (что я предлагаю вам сделать), начиная с iOS8, существует большое расширение UIView под названием UIVisualEffectView.

Есть некоторые ссылки, чтобы следовать, что даст вам шаг за шагом реализации этого шедевра:

Конечно, это только для iOS8, так это может оказаться непригодным для вас, но я размещаю его для других, которые будут искать подобное решение.

+0

Спасибо, Джири, в следующий раз я посмотрю на это! – AnthonyR

Смежные вопросы