通用的三阶段iOSApp开发框架
App开发
APP开发
浏览:868 次

经过两年的发展,我觉得有必要重新学习基础知识。在公司的开发过程中,我依赖于我的前任编写的框架开发。我突然想到,自己开发一个框架对我复习基础知识非常有帮助,所以我有了这个项目
一个常见的三阶段App是UITabbarController+UINavigationController+滑动菜单导航。滑动菜单导航意味着上面有一个导航菜单,您可以通过滑动切换到VC。
除滑动菜单外,其余控件由系统提供。然而,我们在市场上经常看到的UITabarController并不是那么传统。例如,选项卡中间有一个用于发布的自定义按钮。系统提供的UINavigationController有时会遇到难以解决的错误。例如,我最近开发了一个观看短视频的App。我发现,当我使用UINavigationController手动弹出或自动弹出时,视频播放会严重停滞,无法找到正常进度,而定制的屏幕截图导航则不会。看来,斗鱼等常见视频App是截图的原因。
因此,我封装了上述函数,并使用分类方法来促进项目迁移。它还封装了tableView、collectionView、滑动菜单、网络请求(使用AFN)、交互式控件集成……使用此框架,您可以快速开发如下App。
形象
为App开发做准备
首先,您需要确定App的样式,如弹出提示的格式、下拉刷新、下拉加载、什么是普通加载的UI样式、普通页面的一些常见初始化,如白色背景的页面和后退按钮。我将所有这些交互封装到一个控件GDInteraction中。在确定App的UI样式后,我可以通过继承它来确定全局UI样式。该控件以分类方式集成到UIViewController中,并且默认情况下处于关闭状态,以防止影响某些系统内部VC,例如连接到键盘的VC。
确定App样式后,您需要对网络请求进行基本设置,例如加密头、常规头和超时秒数。这是网络请求控制GDNetwork,它被继承用于自定义常规网络设置。更改控件还集成到UIViewController的属性中,UIViewController可以快速对页面进行网络请求,并封装常用的网络请求方法以进行独立的网络请求。
App启动时初始化自定义组件的类型
[UIViewController registerNetworkClass:@“GDMyNetwork”];
[UIViewController registerInteractionClass:@“GDMyInteraction”];
由于代码太多,下面的UIViewController将介绍这一部分
UI选项卡控制器

如上图所示,可以在初始化UITabbarController时创建选项卡中间的发布按钮
//将中间btn添加到标签栏并直接设置框架。x参数无效,始终位于所有tabItems的中间(count/2);
UIButton*centerBtn=[[UIButton alloc]initWithFrame:CGRectMake(0,-30,60,60)];
[centerBtn setImage:[UIImage imageNamed:@“c_tabbar_post”]用于状态:UIControlStateNormal];
自.tabBar。gd_ centerBtn=中心Btn;
自.tabBar。gd_ centerAction=^{
NSLog(@“gd_centerAction”);
};
`
UI导航控制器
这是一个屏幕截图UINavigationController,它重写了系统的所有弹出和推送方法,并设置UINavigation Controller的屏幕截图在整个App生命周期中是否启用,启用后的动画参数可以像使用系统控件一样使用
[UINavigationController setScreenShootEnable:YES];
[UINavigationController setPopCoverAlpha:0.6动画持续时间:0.3 minPopWidth:100 maxDragLeft:40];

对于iOS11中的导航BarItem偏移问题,也有一个解决方案。使用布局标准更改控件。代码如下:
UIButton*backBtn=[[UIButton alloc]init];
[backBtn setImage:[UIImage imageNamed:@“navBackIndicatorImg”]用于状态:UIControlStateNormal];
如果(@可用(iOS 11.0,*)){
//Ios 11+使用gd_ AlignmentRectInsets可以随意修改leftBarButtonItems的位置
背面Btn。gd_ alignmentRectInsets=UIEdgeInsetsMake(0,8,0,-8);
背面Btn。translatesAutoresizingMaskIntoConstraints=否;
}
背面Btn。backgroundColor=[UIColor redColor];
[backBtn addTarget:self-action:@selector(pop)forControlEvents:UIControlEventTouchUpInside];
[backBtn sizeToFit];
//Ios11-以下代码以前有效。ios11+需要上面的代码加上下面的代码来偏移条形图的位置
UIBarButtonItem*空格=[[UIBarBuntonItem分配]initWithBar