仿新浪微博IOS客户端(v5.2.8)——搭建项目基本框架

转载请标明出处:http://blog.csdn.net/android_ls/article/details/45827719

声明:仿新浪微博项目,所用所有图片资源都来源于官方新浪微博IOS客户端,编写本应用的目的在于学习交流,如涉及侵权请告知,我会及时换掉用到的相关图片。

最近我打算利用业余时间,仿下新浪微博IOS客户端,至于能写到哪里我也不确定,能写多少就写多少吧,下面我们开始项目的基本搭建:

1、打开Xcode选择创建新项目,并创建各个模块的目录结构,完成后项目的目录结构如下图:

技术分享


2、我采用的是使用真实的文件夹组织各个模块的代码,选中Classes文件夹,右键Show in Finder可以看到如下几个文件:

技术分享


点击Classes文件夹进入,看到如下几个文件:

技术分享


       通过上面步骤,大家可以看到,用来组织各个模块代码文件夹在硬盘中是真实存在的,这样做的好处是各个模块的代码划分清晰,以后某个模块需要修改或者添加功能,直接找到相应的模块操作即可。

3、在Images.xcassets中设置应用图标如下图:

技术分享

对应的配置文件(Contents.json)如下:

{
  "images" : [
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "[email protected]",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "[email protected]",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "[email protected]",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "40x40",
      "scale" : "3x"
    },
    {
      "size" : "57x57",
      "idiom" : "iphone",
      "filename" : "icon.png",
      "scale" : "1x"
    },
    {
      "size" : "57x57",
      "idiom" : "iphone",
      "filename" : "[email protected]",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "[email protected]",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "[email protected]",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

4、设置LaunchImage的图片如下图:

技术分享


想要你的应用在4S、5、5S、6和6plus上显示都正确,LaunchImage中对应的上图中的几张图片都不可少,每张图对应的尺寸如下:

Retina HD 5.5 对应的图片尺寸:1242?×?2208

Retina HD 4.7 对应的图片尺寸:750?×?1334

iPhone Portrait IOS 7,8(Retina 4) 对应的图片尺寸:640?×?1136

iPhone Portrait IOS 7,8(2x) 对应的图片尺寸:640?×?960

比如少了Retina HD 4.7这张图,效果图如下:左侧在LaunchImage中没有添加Retina HD 4.7这张图,右侧是正常情况下的显示。

技术分享          技术分享


5、创建UIWindow,设置rootViewController并显示窗口,具体代码如下:

#pragma mark 应用程序第一次完成启动,第一个调用的代理方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 1、创建UIWindow
    self.window = [[UIWindow alloc] init];
    self.window.frame = [UIScreen mainScreen].bounds;
    
    // 2、设置rootViewController
    self.window.rootViewController = [[WBTabBarController alloc] init];
    
    // 3、显示窗口
    [self.window makeKeyAndVisible];
    return YES;
}

6、创建WBTabBarController类,让其继承自UITabBarController;依次创建HomeViewController、MessageViewController、DiscoverViewController和ProfileViewController让它们都继承自UITableViewController,在WBTabBarController.m文件中- (void)viewDidLoad {}函数中添加具体实现,代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _homeViewController = [[HomeViewController alloc]init];
    [self addChildController:_homeViewController title:@"首页" image:@"tabbar_home"];
    
    _messageViewController = [[MessageViewController alloc]init];
    [self addChildController:_messageViewController title:@"消息" image:@"tabbar_message_center"];
    
    _discoverViewController = [[DiscoverViewController alloc]init];
    [self addChildController:_discoverViewController title:@"发现" image:@"tabbar_discover"];
    
    _profileViewController = [[ProfileViewController alloc]init];
    [self addChildController:_profileViewController title:@"我" image:@"tabbar_profile"];
}

在Images.xcassets中,添加相应的图片资源,添加好后如下图:

技术分享

7、WBTabBarController类完整的代码如下:

//
//  WBTabBarController.m
//  SinaWeibo
//
//  Created by android_ls on 15/5/17.
//  Copyright (c) 2015年 android_ls. All rights reserved.
//

// 获得RGB颜色
#define kColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]

#import "WBTabBarController.h"
#import "HomeViewController.h"
#import "MessageViewController.h"
#import "DiscoverViewController.h"
#import "ProfileViewController.h"

@interface WBTabBarController ()
{
    HomeViewController * _homeViewController;
    MessageViewController * _messageViewController;
    DiscoverViewController * _discoverViewController;
    ProfileViewController * _profileViewController;
}
@end

@implementation WBTabBarController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _homeViewController = [[HomeViewController alloc]init];
    [self addChildController:_homeViewController title:@"首页" image:@"tabbar_home"];
    
    _messageViewController = [[MessageViewController alloc]init];
    [self addChildController:_messageViewController title:@"消息" image:@"tabbar_message_center"];
    
    _discoverViewController = [[DiscoverViewController alloc]init];
    [self addChildController:_discoverViewController title:@"发现" image:@"tabbar_discover"];
    
    _profileViewController = [[ProfileViewController alloc]init];
    [self addChildController:_profileViewController title:@"我" image:@"tabbar_profile"];
}

/**
 * 添加子控制器到UITabBarController中
 */
- (void)addChildController:(UIViewController *)childViewController title:(NSString *)title image:(NSString *)image
{
    // 设置子控制器,tabbar和navigationBar上的title
    childViewController.title = title;
    
    // 设置tabBarItem上默认的指示图片和选中时的图片
    childViewController.tabBarItem.image = [UIImage imageNamed:image];
    childViewController.tabBarItem.selectedImage = [[UIImage imageNamed:[NSString stringWithFormat:@"%@%@", image, @"_selected"]]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    // 设置tabBarItem上文字的样式(这里是设置文字在不同状态下的颜色值)
    [childViewController.tabBarItem setTitleTextAttributes:
     @{NSForegroundColorAttributeName:kColor(117, 117, 117)} forState:UIControlStateNormal];
    [childViewController.tabBarItem setTitleTextAttributes:
     @{NSForegroundColorAttributeName:kColor(253, 109, 10)} forState:UIControlStateSelected];
    
    [self addChildViewController:[[UINavigationController alloc] initWithRootViewController:childViewController]];
}

@end


Command + R运行,效果图如下:

技术分享       技术分享

就先写到这里吧,晚安。


源码下载地址:http://download.csdn.net/detail/android_ls/8714209



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。