Real time blur effect for Navigation Bar

后端 未结 9 2322
不思量自难忘°
不思量自难忘° 2020-11-28 05:21

How to achieve the real time blurring effect for the navigation bar just like the Trailers app in iPhone.

i.e As you scroll the contents should get blurred behind th

9条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-28 06:00

    Apple has introduced new classes UIVisualEffectView and more to add translucency and blur effect on views from iOS 8.0 release.

    Here how you can use it to add a blur effect to navigation bar or any other UIView:

    Swift 5

    func addBlurEffect() {
        let bounds = self.navigationController?.navigationBar.bounds
        let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
        visualEffectView.frame = bounds ?? CGRect.zero
        visualEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        self.navigationController?.navigationBar.addSubview(visualEffectView)        
    
        // Here you can add visual effects to any UIView control.
        // Replace custom view with navigation bar in the above code to add effects to the custom view.
    }
    

    Objective C Code:

    - (void) addBlurEffect {
        // Add blur view
        CGRect bounds = self.navigationController.navigationBar.bounds;
        UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];
        visualEffectView.frame = bounds;
        visualEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        [self.navigationController.navigationBar addSubview:visualEffectView];
        self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
        [self.navigationController.navigationBar sendSubviewToBack:visualEffectView];
    
        // Here you can add visual effects to any UIView control.
        // Replace custom view with navigation bar in the above code to add effects to the custom view.
    }
    

    UPDATE:

    If you find that after adding blur effect on navigationBar, navigation buttons are not visible then add below line after adding blurView code.

    Swift:

    self.navigationController?.navigationBar.sendSubview(toBack: visualEffectView)
    

    Objective C:

    [self.navigationController.navigationBar sendSubviewToBack:visualEffectView];
    

提交回复
热议问题