[IOS]新浪微博项目2.0
2014-10-03 15:51
549 查看
上一章展示了,此项目的大纲及及运行效果,从本章开始,我们开始新浪微博项目的具体实现
首先我们创建一个项目,因为IOS的不断更新,我们采用ARC的自动内存管理。
1.项目创建好之后,需要手动在文件夹中创建几个文件夹,以便于项目的后续之作
2.需要创建一个公共Base类,和五个标签控制器,每个标签都采用MVC的架构模式,如下:
![](https://img-blog.csdn.net/20141003155952534?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2ltdGhfempw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.搭建界面
①、项目整体分为五个模块,首页,消息,个人中心,广场,更多
②、创建
UINavigationController 和
UITabBarController 作为五个子模块的管理器,因为考虑到需要实现首页界面的左右抽屉控制器切换效果,我们将几个控制器放入一个容器类里面,如下:
③、
UITabBarController :
④、
UINavigationController
项目需要用到的框架 :
![](https://img-blog.csdn.net/20141003161513139?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2ltdGhfempw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
做好准备工作后,我们就可以开始 具体内容的具体实现了~
首先我们创建一个项目,因为IOS的不断更新,我们采用ARC的自动内存管理。
1.项目创建好之后,需要手动在文件夹中创建几个文件夹,以便于项目的后续之作
2.需要创建一个公共Base类,和五个标签控制器,每个标签都采用MVC的架构模式,如下:
3.搭建界面
①、项目整体分为五个模块,首页,消息,个人中心,广场,更多
②、创建
UINavigationController 和
UITabBarController 作为五个子模块的管理器,因为考虑到需要实现首页界面的左右抽屉控制器切换效果,我们将几个控制器放入一个容器类里面,如下:
@implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; //初始化新浪微博对象 self.sinaWeibo = [[SinaWeibo alloc] initWithAppKey:kAppKey appSecret:kAppSecret appRedirectURI:kAppRedirectURI andDelegate:self]; //取出本地保存的认证信息 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSDictionary *sinaweiboInfo = [defaults objectForKey:@"SinaWeiboAuthData"]; if ([sinaweiboInfo objectForKey:@"AccessTokenKey"] && [sinaweiboInfo objectForKey:@"ExpirationDateKey"] && [sinaweiboInfo objectForKey:@"UserIDKey"]) { self.sinaWeibo.accessToken = [sinaweiboInfo objectForKey:@"AccessTokenKey"]; self.sinaWeibo.expirationDate = [sinaweiboInfo objectForKey:@"ExpirationDateKey"]; self.sinaWeibo.userID = [sinaweiboInfo objectForKey:@"UserIDKey"]; } //修改容器控制器 LeftViewController *leftVC = [[LeftViewController alloc] init]; RightViewController *rightVC = [[RightViewController alloc] init]; MainViewController *centerVC = [[MainViewController alloc] init]; [centerVC.tabBar setClipsToBounds:YES]; MMDrawerController *mainVC = [[MMDrawerController alloc] initWithCenterViewController:centerVC leftDrawerViewController:leftVC rightDrawerViewController:rightVC]; //1.设置右边控制器的显示宽度 [mainVC setMaximumRightDrawerWidth:100]; //2.设置左边控制器显示的宽度 [mainVC setMaximumLeftDrawerWidth:100]; //3.设置打开、关闭的手势区域 [mainVC setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll]; [mainVC setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll]; // //4.设置动画的类型(效果) [[MMExampleDrawerVisualStateManager sharedManager] setLeftDrawerAnimationType:MMDrawerAnimationTypeParallax]; [[MMExampleDrawerVisualStateManager sharedManager] setRightDrawerAnimationType:MMDrawerAnimationTypeParallax]; [mainVC setDrawerVisualStateBlock:^(MMDrawerController *drawerController, MMDrawerSide drawerSide, CGFloat percentVisible) { MMDrawerControllerDrawerVisualStateBlock block; block = [[MMExampleDrawerVisualStateManager sharedManager] drawerVisualStateBlockForDrawerSide:drawerSide]; if(block){ block(drawerController, drawerSide, percentVisible); } }]; self.window.rootViewController = mainVC; return YES; }
③、
UITabBarController :
@interface MainViewController ()<SinaWeiboRequestDelegate> @end @implementation MainViewController { ThemeImageView *_tabbarView; ThemeImageView *_selectImgView; ThemeImageView *_badgeView; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self _createViewControllers]; [self _createTabbarView]; [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(timeAction) userInfo:nil repeats:YES]; } - (void)_createTabbarView { for (UIView *view in self.tabBar.subviews) { Class cls = NSClassFromString(@"UITabBarButton"); if ([view isKindOfClass:cls]) { [view removeFromSuperview]; } } _tabbarView = [[ThemeImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 49)]; _tabbarView.imageName = @"mask_navbar.png"; [self.tabBar setClipsToBounds:YES]; [self.tabBar addSubview:_tabbarView]; _selectImgView = [[ThemeImageView alloc] initWithFrame:CGRectMake(0, 0, 64, 49)]; _selectImgView.imageName = @"home_bottom_tab_arrow.png"; [self.tabBar addSubview:_selectImgView]; NSArray *imgNames = @[ @"home_tab_icon_1.png", @"home_tab_icon_2.png", @"home_tab_icon_3.png", @"home_tab_icon_4.png", @"home_tab_icon_5.png", ]; CGFloat itemWidth = kScreenWidth / imgNames.count; for (int i = 0; i < imgNames.count; i++) { ThemeButton *button = [[ThemeButton alloc] initWithFrame:CGRectMake(itemWidth*i, 0, itemWidth, 49)]; button.imgName = imgNames[i]; button.tag = i; [button addTarget:self action:@selector(selectTab:) forControlEvents:UIControlEventTouchUpInside]; [self.tabBar addSubview:button]; } } - (void)selectTab:(UIButton *)button { [UIView animateWithDuration:0.3 animations:^{ _selectImgView.center = button.center; }]; self.selectedIndex = button.tag; CATransition *tren = [[CATransition alloc]init]; tren.type =kCATransitionReveal; // tren.type = @"suckEffect"; // tren.type = @"rippleEffect"; // tren.type = @"cameraIrisHollowOpen"; // tren.type = @"cameraIrisHollowOpen"; // tren.type = @"cameraIrisHollowOpen"; tren.subtype = kCAGravityResizeAspectFill; tren.duration = 0.3; [self.view.layer addAnimation:tren forKey:nil]; } - (void)_createViewControllers { NSArray *storyboardname = @[@"Home",@"Message",@"Profile",@"Disconver",@"More"]; NSMutableArray *viewControllers = [NSMutableArray arrayWithCapacity:5]; for (int i = 0; i < storyboardname.count; i++) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardname[i] bundle:nil]; WXNavigationController *navigation = [storyboard instantiateInitialViewController]; [viewControllers addObject:navigation]; } self.viewControllers = viewControllers; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - timerAction - (void)timeAction { AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; SinaWeibo *sinaweibo = appDelegate.sinaWeibo; [sinaweibo requestWithURL:unread_count params:nil httpMethod:@"GET" delegate:self]; } - (void)request:(SinaWeiboRequest *)request didFinishLoadingWithResult:(id)result { if (_badgeView == nil) { _badgeView = [[ThemeImageView alloc] initWithFrame:CGRectMake(64-32, 0, 32, 32)]; _badgeView.imageName = @"number_notify_9.png"; [self.tabBar addSubview:_badgeView]; ThemeLabel *badgeLabel = [[ThemeLabel alloc] initWithFrame:_badgeView.bounds]; badgeLabel.colorName = @"Timeline_Notice_color"; badgeLabel.textAlignment = NSTextAlignmentCenter; badgeLabel.font = [UIFont boldSystemFontOfSize:13.0f]; badgeLabel.backgroundColor = [UIColor clearColor]; badgeLabel.tag = 100; [_badgeView addSubview:badgeLabel]; } NSNumber *status = result[@"status"]; NSInteger unRead = [status integerValue]; if (unRead > 0) { _badgeView.hidden = NO; ThemeLabel *badaeLabel = (ThemeLabel *)[_badgeView viewWithTag:100]; if (unRead > 100) { unRead = 99; } badaeLabel.text = [status stringValue]; }else { _badgeView.hidden = YES; } } - (void)hideBage { _badgeView.hidden = YES; } @end
④、
UINavigationController
@interface WXNavigationController () @end @implementation WXNavigationController - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:kThemeDidChangeNotification object:nil]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadImage) name:kThemeDidChangeNotification object:nil]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self loadImage]; } - (void)loadImage { NSString *imgName = @"mask_titlebar.png"; if (ios7) { imgName = @"mask_titlebar64.png"; } UIImage *img =[[ThemeManager shareInstance] getThemeImage:imgName]; [self.navigationBar setBackgroundImage:img forBarMetrics:UIBarMetricsDefault]; //3.获取当前主题下的颜色 UIColor *titleColor = [[ThemeManager shareInstance] getThemeColor:@"Mask_Title_color"]; NSDictionary *titleTextAttributes = @{ NSForegroundColorAttributeName:titleColor }; self.navigationBar.titleTextAttributes = titleTextAttributes; //设置返回按钮标题的颜色 if (ios7) { self.navigationBar.tintColor = [[ThemeManager shareInstance] getThemeColor:@"Mask_Title_color"]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. }
项目需要用到的框架 :
做好准备工作后,我们就可以开始 具体内容的具体实现了~
相关文章推荐
- [IOS]新浪微博项目1.0
- [iOS微博项目 - 2.0] - OAuth授权3步
- 无限互联iOS项目视频教程 新浪微博2.8.实现主题Label_在线视频观看
- iOS 平台项目接入新浪微博 SDK 的坑
- iOS 新浪微博-2.0 搜索框/标题带箭头/下拉菜单
- iOS项目更新之升级Xcode7 & iOS9 & swift2.0
- iOS 平台项目接入新浪微博 SDK 的坑
- iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑
- 新浪微博项目---首页技术点三.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现)
- IOS开源项目--新浪微博
- ios开发小项目——新浪微博(一)——OAuth认证
- 《转》iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑
- iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑
- [置顶] iOS之模仿新浪微博项目经验总结
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(六):SharpMap的功能扩展之路
- ASP.NET 2.0:如何让DropDownList同时拥有数据来源项目与自订项目
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(二):源代码总体结构分析
- 着手公司两个大项目的架构,其中一个要求ASP.NET 2.0,技术调查中.
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(八):怎样对SharpMap进行扩展开发——从许可角度来谈
- 一个有趣的项目,可以把TC2.0的代码移到gcc上