回顾自己做过的项目,总结里面的知识点,分享自己参照WXHL的视频开发的一个模拟微博客户端的过程,为了还在IOS上找不到项目参考的朋友,这里会由一系列手把手的教程,如有不足,还希望可以抖抖小手,献上您宝贵的意见,交流交流经验!
注:本文适合已经学完OC基础和基本了解IOS大部分控件知识的读者阅读,如果还没有学习OC的UI控件的话,建议读者先花点时间去阅读教程
1)整体框架
如下图所示,这就是微博整个项目的框架结构图,其中DDMenuController是我们常用的能够左右滑动页面的开源类库,用法也很简单,待会儿会由介绍,一个控制器实现微博客户端的一个子功能(每个控制器还会有许许多多的子功能),有一个整体框架的认识,对后面的开发会带来很大的好处。
2)项目构建
下面简单介绍一下搭建所用的文件,需要加入两个CoreText.framework(处理一些文本),QuarzCore.framework(处理一些动画),
WXBaseModel基本的Model类,用于处理网络数据,还有一些开源类库DDMenu,RTLabel(处理字体,微博有点击@后面的字体,可以访问到用户的资料的界面,还有点击超链接,可以访问网络页面,这些都是通过RTLabel实现),还有就是SDWebImage类库,用来缓存网络的图片,UIUtils封装了常用的工具类,UIViewExt处理UI,还有剩下的WXHLGlobalUICommon,封装了一些常用的全局方法。
然后再创建两个基类,BaseViewController(继承ViewController),BaseNavigationController(继承UIViewController),还有一个MainViewController(继承UITabBarController)。
接下来我们就要初始化5个子控制器,先为每个模块创建一个文件夹,
,分别对应首页,个人资料,消息,发现,更多。然后在每个文件夹里面分别创建子控制器继承(BaseViewController)HomeViewController,ProfileViewController,MessageViewController,DiscoverViewController.h,MoreViewController,
然后再MainViewController里面创建初始化方法
1 //初始化控制器
2 -(void)_initViewController{
3
4 _home = [[HomeViewController alloc] init];
5 MessageViewController *message = [[[MessageViewController alloc] init] autorelease];
6
7 ProfileViewController *profile = [[[ProfileViewController alloc] init]autorelease ];
8
9 DiscoverViewController *discover = [[[DiscoverViewController alloc] init] autorelease];
10 MoreViewController *more = [[[MoreViewController alloc] init]autorelease];
11
12 NSArray *views = @[_home,message,profile,discover,more];
13 NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithCapacity:5];
14 for (UIViewController *viewController in views) {
15
16 BaseNavigationController *nav = [[BaseNavigationController alloc] initWithRootViewController:viewController];
17 [viewControllers addObject:nav];
18 [nav release];
19 }
20
21 self.viewControllers = viewControllers;
22 }
接着在viewDidLoad掉用这个方法
1 - (void)viewDidLoad
2 {
3 [super viewDidLoad];
4 [self _initViewController];
5
6 }
最后在AppDelegate里面启动方法里面初始化MainViewContrller即可
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2 {
3 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
4 self.window.backgroundColor = [UIColor whiteColor];
5 [self.window makeKeyAndVisible];
6
7 //设置主题
8 [self setTheme];
9
10 MainViewController *mainController = [MainViewController alloc] init];
11 self.window.rootViewController = mainController;
12
13
14 return YES;
15 }
void)drawRect:(CGRect)rect方法设置导航栏的背景,之后是通过自带的方法设置的,查看一下代码,
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
所以最好在BaseNavigationController做一个版本控制,稍后在微博主题切换的时候会谈到,不用着急!