本文共 1512 字,大约阅读时间需要 5 分钟。
UIVisualEffectView 视图,为其遮盖的视图提供额外的效果,或影响其内部子视图的效果。
区分两者主要是 UIVisualEffect
的两个子类 UIBlurEffect
和 UIVibrancyEffect
,初始化 UIVisualEffectView 实例对象时需要从两个子类中选择一个,作为视图效果。
但是,通常使用 UIVibrancyEffect
效果的 UIVisualEffectView 实例视图,需要作为用 UIBlurEffect
效果生成的 UIVisualEffectView 实例视图的子视图,来使得其子视图更加生动。
而为 UIVisualEffectView 添加子视图时,需要添加到其 contentView
属性中。
通常,我们使用该类来实现视图的虚化,来保护用户隐私。
@interface SceneDelegate ()@property (nonatomic, strong) UIVisualEffectView *visualEffectView;@end@implementation SceneDelegate- (UIVisualEffectView *)visualEffectView { if (_visualEffectView == nil) { UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleRegular]; _visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; _visualEffectView.frame = UIScreen.mainScreen.bounds; } _visualEffectView.alpha = 1; return _visualEffectView;}- (void)sceneDidBecomeActive:(UIScene *)scene { [UIView animateWithDuration:0.5 animations:^{ self.visualEffectView.alpha = 0; } completion:^(BOOL finished) { [self.visualEffectView removeFromSuperview]; }];}- (void)sceneWillResignActive:(UIScene *)scene {// [self.window addSubview:self.visualEffectView]; }- (void)sceneDidEnterBackground:(UIScene *)scene { [self.window addSubview:self.visualEffectView];}@end
类似支付宝、夸克等应用,从自身应用的活动状态进入非活动状态时,并没有虚化自身界面,而是在进入后台后,在进入非活动状态时,才使得视图虚化。
如果想要应用的视图从活动状态进入非活动状态后就直接虚化,可以在 sceneWillResignActive:
代理中添加 UIVisualEffectView 视图。
UIVisualEffectView 的细节可以参考
转载地址:http://tvdws.baihongyu.com/