项目搭建
一、项目部署
- OSChina:私有,不要钱
- 创建网络代码仓库
- git clone https://gitee.com/f973gaoyuan/BuDeJie.git
- 创建“BudeJie”项目
- push 到远程仓库
二、环境部署
- 勾选Hide status bar – 当程序启动时,隐藏状态栏
- 启动图片采用LaunchImages方式,删除“Launch Screen File” 选项中的 “LaunchScreen.storyboard”–(注:LaunchScreen xcode6 才有)
三、项目启动图片
四、项目结构搭建
- 先选定一开始显示什么? UItabBarController,作为窗口根控制器
- 项目不需要storyboard,直接删除。同时工程中Main interface 删除
五、项目结构分析
六、自定义TarBarVC
七、设置TabBar内容
八、TabBarButton图片渲染
九、TabBarButton抽取图片分类
十、TabBarButton标题渲染
十一、获取UITabBarItem外观
十二、UIAppearance
十三、实现百思样式TabBar - 1
十四、实现百思样式TabBar - 2
十五、抽取UIBarButtonItem
十六、设置导航条内容
十七、添加PCH文件
十八、处理导航条背景图片
十九、设置返回按钮
二十、统一设置返回按钮
- 需求,整个项目的按钮都一样
- 分析,要是统一设置按钮,就不用每次都设置
- 什么时候需要设置返回按钮,每次push的时候设置
- 重写push方法,拦截这个方法
- 注意不要在跟控制器上设置返回按钮
二十一、滑动返回
- 需求:既要覆盖系统返回按钮,又要有滑动返回
- 分析:只要覆盖系统返回按钮,滑动返回就失效
- 原因:滑动返回功能是通过手势去实现的,让它失效,其实是手势失效
- 让手势失效的原因:代理
- 解决:直接干掉代理 self.interactivePopGestureRecognizer.delegate = nil;
- BUG:直接干掉后有假死的现象发生
- 解决:当前控制器为跟控制器时,不要滑动返回,通过代理。在方法gestureRecognizer:shouldReceiveTouch: 中,设置返回return (self.childViewControllers.count > 1);
二十二 全屏滑动返回
- 需求:让整个view区域都可滑动返回(系统默认只能在view左侧边缘区域触发滑动返回)。
- 分析:为什么系统只能滑动左侧边缘
- 原因:系统手势就是边缘滑动手势
- 解决:手动添加滑动手势 UIPanGestureRecognizer *pan
- 获取系统边缘手势的target和action(通过打印方式)。
- target拿不到,
- 直接获取边缘手势代理作为target
- 控制手势什么时候触发
- 让边缘手势失效
//XMGLog(@"%@", self.interactivePopGestureRecognizer);
/* <UIScreenEdgePanGestureRecognizer: 0x7fd004d16770;
state = Possible;
delaysTouchesBegan = YES;
view = <UILayoutContainerView 0x7fd004d02020>;
target= <(action=handleNavigationTransition:,
target=<_UINavigationInteractiveTransition 0x7fd004d15fd0>)>>
*/
//XMGLog(@"%@", self.interactivePopGestureRecognizer.delegate);
/*
<_UINavigationInteractiveTransition: 0x7f9f12f06690>
*/
// 屏蔽系统手势
self.interactivePopGestureRecognizer.enabled = NO;
id target = self.interactivePopGestureRecognizer.delegate;
// 添加手势到导航控制器的view 实现任何区域都可滑动
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target
action:@selector(handleNavigationTransition:)];
pan.delegate = self;
[self.view addGestureRecognizer:pan];
//***********************