Monika Patel
Monika Patel

Reputation: 2375

How to Blur effect apply on UIView in iOS?

In my application i want to apply blur effect on uiview.So how can i achive blur effect. I tried by below code:

UIGraphicsBeginImageContext(scrollview.bounds.size);
[scrollview.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:3] forKey: @"inputRadius"];
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
UIImage *endImage = [[UIImage alloc] initWithCIImage:resultImage];

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

But having problem using this code. when apply blur effect that time view became small.

Upvotes: 16

Views: 16422

Answers (3)

Kuldeep Tanwar
Kuldeep Tanwar

Reputation: 3526

Swift 5 Extenstion!

extension UIView {
    func applyBlurEffect(_ style: UIBlurEffect.Style = .light) {
        let blurEffect = UIBlurEffect(style: style)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = bounds
        blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        addSubview(blurEffectView)
    }
}

Use it on any subcass of UIView like this

view.applyBlurEffect(.light)

Upvotes: 7

Vineet Ashtekar
Vineet Ashtekar

Reputation: 1952

Just put this blur view on the View (here yourBlurredView) which you want to be blurred. Here is an example in Objective-C:

UIVisualEffect *blurEffect; 
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

visualEffectView.frame = yourBlurredView.bounds; 
[yourBlurredView addSubview:visualEffectView];

and Swift:

var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))    

visualEffectView.frame = yourBlurredView.bounds

yourBlurredView.addSubview(visualEffectView)

Upvotes: 34

WolfLink
WolfLink

Reputation: 3317

If you are working with iOS 8 or later, try using a UIVisualEffectView with a UIBlurEffect.

Upvotes: 2

Related Questions