zoukankan      html  css  js  c++  java
  • 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];
    }
    

     

  • 相关阅读:
    损失函数
    DPM 目标检测1
    编程题
    枚举型和元类
    python 多继承
    网络基础Cisco路由交换一
    网络基础tcp/ip协议五
    网络基础tcp/ip协议四
    网络基础tcp/ip协议三
    网络基础tcp/ip协议二
  • 原文地址:https://www.cnblogs.com/shenlaiyaoshi/p/8807182.html
Copyright © 2011-2022 走看看