星空网 > 软件开发 > ASP.net

KVO——导航栏随着向下滚动而消失

* KVO: key(键)-value(值)-observer(观察者)

   通过对一个对象、属性或者变量值的观察来做出对应的动作

   只要key对应的值发生改变 就会告诉观察者新旧值的变化

   通过key来判断是哪一个KVO

 

要实现KVO需要的条件:

* 1.有观察者、被观察的对象

   添加观察者方法: 用谁去调用谁就是观察者 给被观察的对象添加一个观察者

   [被观察的对象 addObserver:self forKeyPath:@"观察的 属性" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

 

* 2.只要值发生改变就去触发 告诉观察者值已经发生改变

   只要观察的值发生改变就会去调用  

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context

   keyPath:观察的哪一个属性

   Object:可以用于传值

   change:里面是一个字典 包含发生改变的新值和旧值 

 

* 3.不再需要观察这个对象的时候移除观察者 只要不移除就会崩溃 ***

   [被观察的对象 removeObserver:self forKeyPath:@"观察的 属性"];

 

我们在玩App的时候都看到过当你向下拉页面的时候就会看到导航栏会慢慢消失,今天就以它为例介绍一下怎么具体使用KVO

首先创建一个带导航栏的视图控制器

#import "AppDelegate.h"#import "ViewController.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];  self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];  [self.window makeKeyAndVisible];    //设置导航栏的颜色  [UINavigationBar appearance].barTintColor = [UIColor colorWithRed:0.400 green:0.800 blue:1.000 alpha:1.000];    return YES;}@end

在ViewController.m文件里面

#import "ViewController.h"@interface ViewController (){  UIScrollView *myScrollView;}@end@implementation ViewController- (void)viewDidLoad {  [super viewDidLoad];    //创建滚动视图  myScrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];  myScrollView.backgroundColor = [UIColor whiteColor];  myScrollView.contentSize = CGSizeMake(0, 2000);  [self.view addSubview:myScrollView];        //让self观察myScrollView里面的contentOffset的值 是否发生改变  [myScrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];}//只要值发生改变就去触发,告诉观察者值已经发生改变的方法- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{    NSLog(@"%@ %@",keyPath,change);    CGPoint changPoint = [change[@"new"] CGPointValue];  CGFloat y = changPoint.y+64;  NSLog(@"%f",1-y/100);    self.navigationController.navigationBar.alpha = 1-y/100;  }- (void)dealloc{  //移除观察者  [myScrollView removeObserver:self forKeyPath:@"contentOffset"];}@end

效果就是:

 




原标题:KVO——导航栏随着向下滚动而消失

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

澳大利亚的标志性建筑物是什么:https://www.goluckyvip.com/tag/56010.html
德国标志性建筑:https://www.goluckyvip.com/tag/56011.html
世界卫生组织标志:https://www.goluckyvip.com/tag/56017.html
世界货币符号一览表:https://www.goluckyvip.com/tag/56018.html
差评撤掉:https://www.goluckyvip.com/tag/5602.html
各国货币符号大全:https://www.goluckyvip.com/tag/56021.html
16个独特的商业创意,带你收获真正赚钱的创业理念:https://www.kjdsnews.com/a/1840836.html
2017天台景区收门票吗 2017天台景区收门票吗多少钱:https://www.vstour.cn/a/404226.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流