IOS开发 左右弹出菜单视图 菜鸟纯代码实现思路
来源:互联网 发布:linux 禁止ip 编辑:程序博客网 时间:2024/06/11 00:45
网上看了很多关于左右弹出菜单类的效果,现在很多IOS应用都应用这种特效,一是省空间,二是符合当代年轻人的触控体验等,先不说这个,我们聊聊技术上的实现方案
我这里就不说采用第三方组件进行开发了,就单纯的用代码来实现吧
实现思路
1. 在当前视图动态创建需要弹出菜单的UIViewController ( 采用keyWindow方式添加此视图进去)
FMCountrySelectViewController *_countrySelectView;- (void)viewDidLoad{ [super viewDidLoad]; // 初始化菜单视图 我这里采用StoryBoard的方式寻找视图 _countrySelectView = [[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil] instantiateViewControllerWithIdentifier:@"CountrySelectView"] ;//[[FMCountrySelectViewController alloc] init]; [_countrySelectView.view setFrame:CGRectMake(320, 0, _countrySelectView.view.frame.size.width, _countrySelectView.view.frame.size.height)]; [[UIApplication sharedApplication].keyWindow addSubview:_countrySelectView.view];}
2.控制好视图的frame(当前View包括 View 和 NavigationBar )
// 显示切换菜单帅选视图-(void)showCountrySelectView{ // 判断菜单视图是否出来了 CGFloat isX = _countrySelectView.view.frame.origin.x; // 把当前视图赋值给countrySelectView _countrySelectView._indexNewsView = self; if (isX==self.view.frame.size.width) { // 没有推出则进行推出动画 [self pushCountryView]; }else{ // 否则还原 [self popCountryView]; } }// 推出菜单视图- (void) pushCountryView{ //给将出来的视图加阴影 layer = _countrySelectView.view.layer; layer.shadowColor = [UIColor blackColor].CGColor; layer.shadowOffset = CGSizeMake(1, 1); layer.shadowOpacity = 1.0; layer.shadowRadius = 20.0; // 添加动画 [UIView beginAnimations:nil context:Nil]; // 开始动画 [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];// 设置动画类型 // 菜单视图推出来60个像素 CGFloat movePix = 60; [_countrySelectView.view setFrame:CGRectMake(_countrySelectView.view.frame.size.width-movePix, _countrySelectView.view.frame.origin.y, _countrySelectView.view.frame.size.width, _countrySelectView.view.frame.size.height)]; // 原视图向左退60,包括导航视图 [self.view setFrame:CGRectMake(-movePix, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height)]; [self.navigationController.navigationBar setFrame:CGRectMake(-movePix, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)]; [UIView commitAnimations]; }// 还原菜单视图,还原为原始布局- (void) popCountryView{ // 添加动画 [UIView beginAnimations:nil context:Nil]; // 开始动画 [UIView setAnimationDelegate:self]; [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];// 设置动画类型 [UIView setAnimationDidStopSelector:@selector(overMoved)]; //动画完成执行 // 恢复原状 CGFloat movePix = 0; [_countrySelectView.view setFrame:CGRectMake(_countrySelectView.view.frame.size.width, _countrySelectView.view.frame.origin.y, _countrySelectView.view.frame.size.width, _countrySelectView.view.frame.size.height)]; // 原视图向右退回原位,包括导航视图 [self.view setFrame:CGRectMake(movePix, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height)]; [self.navigationController.navigationBar setFrame:CGRectMake(movePix, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)]; [UIView commitAnimations]; }// 这个是动画完成后执行的,让菜单视图的阴影去掉- (void)overMoved{ NSLog(@"动画完成"); layer.shadowOpacity = 0;}
实现的效果如下:
0 0
- IOS开发 左右弹出菜单视图 菜鸟纯代码实现思路
- [IOS 视图布局]左右菜单PPRevealSideviewController
- 【IOS学习】视图切换,纯代码实现 UITabBarController,NavigationController
- IOS 纯代码实现视图控制器的封装
- iOS开发-微信右侧弹出视图实现
- iOS开发弹出半透明视图
- iOS开发弹出半透明视图
- iOS UIPresentationController实现弹出视图
- IOS 纯代码实现界面
- iOS UICollectionView学习之二,纯代码实现布局,纯代码实现添加Section Header头部视图和 Section Footer尾部视图
- IOS实现弹出菜单效果MenuViewController(背景 景深 弹出菜单)
- IOS实现弹出菜单效果MenuViewController(背景 景深 弹出菜单)
- iOS学习笔记12--纯代码实现原生UITabBarController,手势滑动切换视图
- 实现ios常见菜单效果的思路
- iOS开发-------UIAlertController(弹出视图控制器)
- jQuery弹出侧边栏滑动菜单实现思路
- iOS-一个弹出菜单动画视图开源项目分享
- iOS左右菜单PPRevealSideviewController
- Android adb shell 命令大全
- Redis: under the hood
- Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)
- 如何利用knowledge base来做推荐
- MySQL索引基础--菜鸟篇
- IOS开发 左右弹出菜单视图 菜鸟纯代码实现思路
- 富士通陆宇澄:下半年推出主流价位超极本
- <<图解TCP_IP_第5版>>下载
- TCP之再谈解决服务器TIMEWAIT过多的问题
- 360秒传原理
- shared pool之一:heap /extent /chunk/x$ksmsp
- ubuntu下载配置vsftpd
- VIM 的 dictionary 补全
- SQL解决过去M天内连续N天符合某条件问题