博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
电影项目 (一)
阅读量:5153 次
发布时间:2019-06-13

本文共 6523 字,大约阅读时间需要 21 分钟。

 

实现页面效果如下 :

点击子标签切换对应的页面.

 

第一天(搭建项目框架)

 1.创建项目,设置相关的信息(图标....)
 2.使用Storyboard搭建三级控制器框架

子类化导航控制器,子类化Button

 3.自定义标签栏(移除系统TabBarButton,使用自定义的WXTabBarButton)
 4.设置导航栏

 

代码如下:

1>

BaseNavigationController类 :

 

1 #import "BaseNavigationController.h" 2  3 @interface BaseNavigationController () 4  5 @end 6  7 @implementation BaseNavigationController 8  9 - (void)viewDidLoad {10     [super viewDidLoad];11 12     //设置导航栏背景图片13     [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav_bg_all-64"]14                                forBarMetrics:UIBarMetricsDefault];15     16     //设置是不起效果的17 //    self.navigationBar.tintColor = [UIColor whiteColor];18 //    self.navigationBar.barTintColor = [UIColor whiteColor];19 //20     21     //设置导航栏的样式,黑色,则标题是白色的22     self.navigationBar.barStyle = UIBarStyleBlack;23     24 25 }26 27 28 //设置状态栏的样式   状态栏的字是白色的29 - (UIStatusBarStyle)preferredStatusBarStyle30 {31     return UIStatusBarStyleLightContent;32     33 }

 

 

2>

WXTabBarButton类 :

 

1 #import "WXTabBarButton.h" 2  3 @interface WXTabBarButton () 4  5 @property (nonatomic,strong)UIImageView *imageView; 6 @property (nonatomic,strong)UILabel *titleLabel; 7  8 @end 9 10 11 @implementation WXTabBarButton12 13 - (instancetype)initWithFrame:(CGRect)frame14                 WithImageName:(NSString *)imageName15                     WithTitle:(NSString *)title{16 17     self = [super initWithFrame:frame];18     if (self) {19         20         //1.创建标签栏图片视图21         _imageView = [[UIImageView alloc]initWithFrame:CGRectMake((frame.size.width - 20) / 2, 7, 20, 20)];22         _imageView.image = [UIImage imageNamed:imageName];23         _imageView.contentMode = UIViewContentModeScaleAspectFit;24         _imageView.userInteractionEnabled = YES;25         26         27         [self addSubview:_imageView];28         29         30         //2.创建标签栏标题31         _titleLabel = [[UILabel alloc]32                        initWithFrame:CGRectMake(0, 7 + 20 + 5, frame.size.width, 17)];33         _titleLabel.textAlignment = NSTextAlignmentCenter;34         _titleLabel.font = [UIFont boldSystemFontOfSize:14];35         _titleLabel.textColor = [UIColor whiteColor];36         37         _titleLabel.text = title;38         39         [self addSubview:_titleLabel];40     }41 42     return self;43     44 }

 

 

3>

MainTabBarController类:

 

1 #import "MainTabBarController.h"  2   3 //导入文件  4 #import "Common.h"  5 #import "WXTabBarButton.h"  6   7   8 @interface MainTabBarController ()  9  10 @property (nonatomic,strong)UIImageView *selectedView; 11  12 @end 13  14 @implementation MainTabBarController 15  16 - (void)viewDidLoad { 17     [super viewDidLoad]; 18  19      20  21     //设置导航栏 22     [self _customNavigationBar]; 23      24     //移除按钮 25     [self _removeTabBarButton]; 26  27     //自定义标签栏 28     [self _customTabBar]; 29  30 } 31  32 //视图将要出现的时候调用 33 - (void)viewWillAppear:(BOOL)animated { 34     [super viewWillAppear:animated]; 35      36     //视图将要出现的时候,移除tabbar上的按钮 37      38     //使用storyboard搭建三级控制器,在viewDidLoad方法走完之后,故事板没有全部加载完成 39     //等故事板加载完成,就会再次添加tabbarbutton 40     [self _removeTabBarButton]; 41 } 42  43  44 - (void)didReceiveMemoryWarning { 45     [super didReceiveMemoryWarning]; 46     // Dispose of any resources that can be recreated. 47 } 48  49  50  51 #pragma mark - 标签栏的设置 52  53 //自定义标签栏 54 - (void)_customTabBar{ 55  56     //1.设置标签栏的背景图片 57  58     self.tabBar.backgroundImage = [UIImage imageNamed:@"tab_bg_all"]; 59      60     // 2.选中的视图 61     _selectedView = [[UIImageView alloc] 62                      initWithImage:[UIImage imageNamed:@"selectTabbar_bg_all1"]]; 63     _selectedView.frame = CGRectMake(0, 0, 55, 47); 64     [self.tabBar addSubview:_selectedView]; 65      66     //3.设置TabBar按钮 67      68     //先将数据存起来至数组 69     NSArray *titles = @[ @"首页", @"新闻", @"Top", @"影院", @"更多" ]; 70      71     NSArray *imageNames = @[ 72                             @"movie_home", 73                             @"msg_new", 74                             @"start_top250", 75                             @"icon_cinema", 76                             @"more_setting" 77                             ]; 78      79     float buttonWidth = kScreenWidth/titles.count; 80      81     for (NSInteger i = 0; i < titles.count; i++) { 82          83         //取得标题和图片 84         NSString *title = titles[i]; 85         NSString *imageName = imageNames[i]; 86          87         //设置每个按钮的fram 88         CGRect fram = CGRectMake(buttonWidth * i, 0, buttonWidth, kTabBarHeight); 89          90         //使用自定义的控件创建按钮 91         WXTabBarButton *button = [[WXTabBarButton alloc]initWithFrame:fram WithImageName:imageName WithTitle:title]; 92          93         button.tag = 1000 + i; 94          95         [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 96         [self.tabBar addSubview:button]; 97          98         if (i == 0) { 99             100             //选中的视图和第一个按钮对齐101             _selectedView.center = button.center;102             103         }104         105     }106 }107 108 109 //移除系统标签栏上的按钮110 - (void)_removeTabBarButton {111     112     //取到所有的子视图113     for (UIView *view in self.tabBar.subviews) {114         //从字符串生成一个类名115         Class class = NSClassFromString(@"UITabBarButton");116         117         //找出UITabBarButton,移除掉118         if ([view isKindOfClass:class]) {119             [view removeFromSuperview];120         }121     }122     123     // NSLog(@"%@", self.tabBar.subviews);124 }125 126 127 #pragma mark - Button Action128 - (void)buttonAction:(UIButton *)sender {129     130     //1.切换控制器131     self.selectedIndex = sender.tag - 1000;132     133     134     135     //3.设置动画136     [UIView beginAnimations:nil context:nil];137     [UIView setAnimationDuration:.35];138     139     //2.移动选中的视图140     _selectedView.center = sender.center;141     142     [UIView commitAnimations];143 144 }145 146 147 148 #pragma mark - 设置导航栏149 - (void)_customNavigationBar {150     151     /*152      for (UINavigationController *naviCtrl in self.viewControllers) {153      [naviCtrl.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav_bg_all-64"] forBarMetrics:UIBarMetricsDefault];154      }155      */156     157     //Appearance 作用:158     //实现UIAppearance这个协议方法的系统控件,可以使用它来修改它的默认的样式159     //只有这行代码执行之后,后面创建控件才会受到影响160     [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav_bg_all-64"] forBarMetrics:UIBarMetricsDefault];161     162 }

 

转载于:https://www.cnblogs.com/pengsi/p/4862039.html

你可能感兴趣的文章
尤金·卡巴斯基:卡巴斯基实验室调查内网遭黑客攻击事件
查看>>
android之Handler Runnable实现倒计时
查看>>
putty修改编码
查看>>
安全版字符串操作函数
查看>>
数据库msqlserver的几种类型及解决MSSQLServer服务启动不了的问题
查看>>
CSS轮廓 边距 填充 分组和嵌套
查看>>
JAVA多线程--线程阻塞与唤醒
查看>>
JavaSE语法基础总结
查看>>
python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析
查看>>
线性表9 - 数据结构和算法14
查看>>
OD使用教程21(上) - 调试篇21
查看>>
循环移位
查看>>
函数的两种调用方式
查看>>
Spring mvc4 + ActiveMQ 整合
查看>>
Python基础(8)素数输出
查看>>
VS.左侧_蓝黄绿_竖线
查看>>
POS Tagging 标签类型查询表(Penn Treebank Project)
查看>>
Cookie/Session机制详解
查看>>
sklearn 数据预处理1: StandardScaler
查看>>
搭建Docker环境---Docker概述
查看>>