回顾自己做过的项目,总结里面的知识点,分享自己参照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 }
IOS5.0之前是通过- (void)drawRect:(CGRect)rect方法设置导航栏的背景,之后是通过自带的方法设置的,查看一下代码,
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
所以最好在BaseNavigationController做一个版本控制,稍后在微博主题切换的时候会谈到,不用着急!