iphone:类似path的抽屉式导航效果的demo总结

简介:

如题,关于抽屉式导航,CocoaChina上也有篇总结,有兴趣的也可以去了解,http://www.cocoachina.com/newbie/tutorial/2012/0720/4475.html

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

第二份demo:其实思路都是一样的,改变相应的view的frame,然后让其显示。参考了cocoa上的一份代码(http://www.cocoachina.com/iphonedev/toolthain/2011/1222/3768.html

里面有把弹出的导航放在不同的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];
    
}
复制代码

 

本文转自老Zhan博客园博客,原文链接:http://www.cnblogs.com/mybkn/archive/2012/07/25/2607988.html,如需转载请自行联系原作者

相关文章
|
Android开发 iOS开发
仿iphone快速导航悬浮球
用过iphone的朋友都知道,iPhone有个圆球辅助工具,它漂浮在你的手机屏幕(在任何APP之上),你可以将它移动到任何地方,它叫做AssistiveTouch,本篇模拟该软件实现一个小案例,主要是实现它的界面,首先来看看实现的效果吧: 拖动小圆球: 点击弹出pop窗口: 为了让辅助工具一直悬浮在窗口之上,这里使用的机
1850 0
|
10月前
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
10月前
|
编解码 iOS开发 UED
响应式设计在 iPhone 开发适配中的具体应用
【10月更文挑战第23天】响应式设计在 iPhone 开发适配中扮演着至关重要的角色,它能够帮助我们打造出适应不同屏幕尺寸和用户需求的高质量应用。通过合理运用响应式设计的原则和方法,我们可以在提供良好用户体验的同时,提高开发效率和应用的可维护性。
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现
119 1
|
Shell iOS开发
iOS逆向:tweak开发教程(iPhone/tool)
iOS逆向:tweak开发教程(iPhone/tool)
1379 0
iOS逆向:tweak开发教程(iPhone/tool)
|
编解码 iOS开发
iphone 开发的基本入门知识
iphone 开发的基本入门知识
326 0
「镁客早报」iPhone或将在今年采用三摄;传Facebook致力于开发语音助力服务与亚马逊、苹果竞争
亚马逊向美国Alexa设备推免费音乐服务;视频会议软件开发商Zoom纳斯达克上市。
323 0
|
Web App开发 缓存 开发工具