• iOS-毛玻璃、navigationBar滑动颜色渐变


    1、毛玻璃实现

    iOS8以上,官方提供了系统方法实现毛玻璃,代码如下:

    // iOS8 UIVisualEffectView
        UIImageView *bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"car.png"]];
        bgView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
        [self.view addSubview:bgView];
        UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];
        blurView.alpha = 0.9; // 控制模糊程度
        blurView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
        [bgView addSubview:blurView];
        
        UIVibrancyEffect *vibrancyView = [UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)blurView.effect];
        UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyView];
        visualEffectView.translatesAutoresizingMaskIntoConstraints = NO;
        [blurView.contentView addSubview:visualEffectView];
    

    a> UIBlurEffectStyle = UIBlurEffectStyleExtraLight;

     
    Paste_Image.png

    b> UIBlurEffectStyle = UIBlurEffectStyleLight;

     
    Paste_Image.png

    c> UIBlurEffectStyle = UIBlurEffectStyleDark;

     
    Paste_Image.png
    2、导航栏滑动渐变

    导航栏最开始的状态是透明的状态,可以看到后面的图片。之后随着用户的滑动颜色开始加深。
    代码如下:

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                                                      forBarMetrics:UIBarMetricsDefault];
         self.navigationController.navigationBar.shadowImage = [UIImage new];
    }
    

    在tableview或scrollview的代理方法中:

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        CGFloat minAlphaOffset_Y = - 64;
        CGFloat maxAlphaOffset_Y = 125;
        CGFloat offset_Y = scrollView.contentOffset.y;
        CGFloat alpha = (offset_Y - minAlphaOffset_Y) / (maxAlphaOffset_Y - minAlphaOffset_Y);
        [[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:alpha];
    }
    

    但是在跳转的时候需要恢复原状,即导航栏呈现不透明状态,可以封装跳转方法:

    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
        [[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:1];
        [self.navigationController pushViewController:viewController animated:animated];
    }
    

     

  • 相关阅读:
    pthread_rwlock_rdlock和“No such file or directory”
    Thrift线程和状态机分析
    Haodoop RPC解析
    Thrift结构分析及增加取客户端IP功能实现
    StarUML 5.0问题解决:Failed to open the model file. Invalid file format.
    检测Linux系统是否支持某系统调用
    eclipse的thrift插件
    常见gcc编译问题解决方法集
    Thrift编译错误('::malloc' has not been declared)
    安装Android SDK Manager的“Failed to fetch refused”问题解决方法
  • 原文地址:https://www.cnblogs.com/shenlaiyaoshi/p/8807182.html
Copyright © 2020-2023  润新知