博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iphone:类似path的抽屉式导航效果的demo总结
阅读量:7037 次
发布时间:2019-06-28

本文共 3247 字,大约阅读时间需要 10 分钟。

如题,关于抽屉式导航,CocoaChina上也有篇总结,有兴趣的也可以去了解,

第一份demo:在一个ViewController中定义了各种frame不同的UIView,然后在点击或者手势滑动的时候现实隐藏相应的view就是了。 十分简陋,不过效果还是有一点的。因为简陋,代码就不贴出来了,说了思路就行。

第二份demo:其实思路都是一样的,改变相应的view的frame,然后让其显示。参考了cocoa上的一份代码(

里面有把弹出的导航放在不同的ViewController中,然后在appDelegate中让其现实不同frame的view。

效果如图:

其中关键的代码:

- (void)makeLeftViewVisible {    self.root.view.layer.shadowColor = [UIColor blueColor].CGColor;    self.root.view.layer.shadowOpacity = 0.4f;    self.root.view.layer.shadowOffset = CGSizeMake(-12.0, 1.0f);    self.root.view.layer.shadowRadius = 7.0f;    self.root.view.layer.masksToBounds = NO;    [self moveToRightSide];    [self.leftViewController setVisible:YES];}// move view to right side- (void)moveToRightSide {    [self animateHomeViewToSide:CGRectMake(270.0f,                                           self.root.view.frame.origin.y,                                           self.root.view.frame.size.width,                                           self.root.view.frame.size.height)];}// animate home view to side rect- (void)animateHomeViewToSide:(CGRect)newViewRect {    [UIView animateWithDuration:0.2                     animations:^{                         self.root.view.frame = newViewRect;                     }                     completion:^(BOOL finished){                         UIControl *overView = [[UIControl alloc] init];                         overView.tag = 10086;                         overView.backgroundColor = [UIColor clearColor];                         overView.frame = self.root.view.frame;                         [overView addTarget:self action:@selector(restoreViewLocation) forControlEvents:UIControlEventTouchDown];                         [[[UIApplication sharedApplication] keyWindow] addSubview:overView];                     }];}//restore view- (void)restoreViewLocation {    [UIView animateWithDuration:0.3                     animations:^{                         self.root.view.frame = CGRectMake(0,                                                                           self.root.view.frame.origin.y,                                                                           self.root.view.frame.size.width,                                                                           self.root.view.frame.size.height);                     }                     completion:^(BOOL finished){                         UIControl *overView = (UIControl *)[[[UIApplication sharedApplication] keyWindow] viewWithTag:10086];                         [overView removeFromSuperview];                     }];}

我做的点修改,把上面代码放在了appDelegate中,这样就能在任何地方都调用实现弹出导航栏了。

 

另外我想在点击左侧的“aaa”“bbb”“ccc”时,使起切换到不同的controller,改变appdelegate中的self.window.rootViewController 就行。

一开始切换时不注意,使navi的bar没显示出来。最后发现是设置self.window.rootViewController直接设置了xxViewConroller,而没有设置navi..Controller, 

应该是下面的做法

- (void) setRootVC:(UIViewController *)root{        self.navi = [[UINavigationController alloc] initWithRootViewController:root];    [self.window setRootViewController:self.navi];        self.window.rootViewController.view.frame = self.root.view.frame;    self.root = [self.window rootViewController];    NSLog(@"root.view.frame.x %f %f ",self.root.view.frame.origin.x,self.root.view.frame.origin.y);    [self.window makeKeyAndVisible];    }

 

 

转载地址:http://ptnal.baihongyu.com/

你可能感兴趣的文章
C Primer Plus 第6版 编程练习 2.12 答案
查看>>
有线电视的用户信息,成为美国黑客的新目标
查看>>
物联网智慧社区 衣食住行全智能
查看>>
高性能的Python扩展:第一部分
查看>>
Qt Linguist介绍
查看>>
Qt Creator快捷键
查看>>
《C语言解惑》—— 2.2 printf输出整数或字符
查看>>
为什么在 Redis 实现 Lua 脚本事务?
查看>>
《草根自媒体达人运营实战》一一2.4 总结
查看>>
Linux 内核被指缺乏安全性
查看>>
《Hadoop与大数据挖掘》——2.7 本章小结
查看>>
《Unity 3D人工智能编程》——2.2 子弹类
查看>>
flatpickr 发布 V3 版本 ,Javascript 日期选择器
查看>>
Win10 Creators Update:自动激活磁盘清理工具
查看>>
《淘宝店铺 大数据营销+SEO+爆款打造 一册通》导读
查看>>
开源大数据周刊-第57期
查看>>
java中文乱码解决之道(六)—–javaWeb中的编码解码
查看>>
《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》导读
查看>>
后台 JavaScript 编译改进 Chrome 性能
查看>>
数据结构课程设计实战
查看>>