Shi*_*ney 31 objective-c uinavigationbar uinavigationcontroller ios swift
如何像iPhone中的预告片应用程序一样实现导航栏的实时模糊效果.
即当您滚动时,内容应该在导航栏后面变得模糊.请帮我一些代码.
谢谢!
我想达到这样的效果: -
Kam*_*pai 41
Apple已经推出了新的UIVisualEffectView类以及更多来为iOS 8.0版本的视图添加半透明和模糊效果.
在这里您可以如何使用它为导航栏或任何其他添加模糊效果UIView
:
func addBlurEffect() {
let bounds = self.navigationController?.navigationBar.bounds as CGRect!
let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
visualEffectView.frame = bounds!
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 above code to add effects to custom view.
}
Run Code Online (Sandbox Code Playgroud)
目标C代码:
- (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 above code to add effects to custom view.
}
Run Code Online (Sandbox Code Playgroud)
更新:
如果您在navigationBar上添加模糊效果后发现导航按钮不可见,则在添加blurView代码后添加下面的行.
迅速:
self.navigationController?.navigationBar.sendSubview(toBack: visualEffectView)
Run Code Online (Sandbox Code Playgroud)
目标C:
[self.navigationController.navigationBar sendSubviewToBack:visualEffectView];
Run Code Online (Sandbox Code Playgroud)
extension UINavigationBar {
func installBlurEffect() {
isTranslucent = true
setBackgroundImage(UIImage(), for: .default)
let statusBarHeight: CGFloat = UIApplication.shared.statusBarFrame.height
var blurFrame = bounds
blurFrame.size.height += statusBarHeight
blurFrame.origin.y -= statusBarHeight
let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
blurView.isUserInteractionEnabled = false
blurView.frame = blurFrame
blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(blurView)
blurView.layer.zPosition = -1
}
}
Run Code Online (Sandbox Code Playgroud)
navigationController?.navigationBar.installBlurEffect()
Run Code Online (Sandbox Code Playgroud)
小智 7
注意:在iOS 11上,功能sendSubviewToBack
无法正常工作.为了实现这一点,我们应该使用zPosition
模糊效果视图放在其他视图下.
self.visualEffectView.layer.zPosition = -1;
Run Code Online (Sandbox Code Playgroud)
Objective-C代码
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
self.navigationController.navigationBar.translucent = YES;
// Add blur view
CGRect bounds = self.navigationController.navigationBar.bounds;
bounds.size.height += 20;
bounds.origin.y -= 20;
_visualEffectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];
self.visualEffectView.frame = bounds;
self.visualEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.visualEffectView.userInteractionEnabled = NO;
self.visualEffectView.layer.zPosition = -1;
[self.navigationController.navigationBar addSubview:self.visualEffectView];
[self.navigationController.navigationBar sendSubviewToBack:self.visualEffectView];
Run Code Online (Sandbox Code Playgroud)
Swift 4代码
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
var bounds = view.bounds
bounds.size.height += 20
bounds.origin.y -= 20
visualEffectView.isUserInteractionEnabled = false
visualEffectView.frame = bounds
visualEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.navigationController?.navigationBar.addSubview(visualEffectView)
visualEffectView.layer.zPosition = -1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21886 次 |
最近记录: |