电影项目计划大纲
上午
1. 电影项目的需求介绍
2. 公司的组织架构介绍
3. 产品开发流程总体介绍
4. 需求文档、原型图
5. 代码开发规范介绍
下午
5. 项目环境的搭建,图片的添加
6. 为每一个模块创建子控制器
7. 定义BaseController,讲解此类的作用
8. 创建storyBoard文件,在其中定义所有的控制器
9. 使用内置的UITabbar定制上面的选项按钮
10. 屏幕宽高的公共宏的定义,UIViewExt的实现
11. 选项按钮的子类化实现
12. 导航栏背景的设置
13. ios6与ios7 状态栏颜色的设置
效果图:
知识点
1、类对象和字符串的转化
// NSStringFromClass(<#__unsafe_unretained Class aClass#>)
// NSClassFromString(<#NSString *aClassName#>)
2、标签栏上 的按钮
UITabBarButton 作为显示
UITabBarItem ---> modal 记录了数据
数据交给 UITabBarButton 显示
3、UIbutton种 子视图位置的调整
//调整image title 位置
// button.titleEdgeInsets = UIEdgeInsetsMake(30, -18, 0, 0);
// button.imageEdgeInsets = UIEdgeInsetsMake(-10, 20, 0, 0);
4、自己实现HWButton 继承于 UIControl
5、layoutSubViews 讲解
第二天
课程目录:
上午
1. 翻转动画的使用
2. 导航栏上右侧按钮的创建与翻转
3. 列表视图、海报视图的创建与翻转动画
4. JSON数据的概念与解析
下午
5. 创建电影Model类
6. 创建电影单元格Cell, 使用xib绘制子视图
7. iOS7的半透明导航栏与UITableView的适配问题
8. 电影单元格的数据填充实现
9. 评分星星的实现思路分析
10. 封装实现评分星星视图
11. 为UIView扩展宽高、坐标的设置器方法
效果图:
知识点
1、翻转动画
[UIView transitionWithView:self.view duration:0.4 options:option animations:nil completion:nil];
2 、基本用法 #pragma mark - Tools
3、button sizeToFit
Resizes the receiver’s frame so that it is the minimum size needed to contain its cell.
自适应size 能够装下所有子视图
4、Json解析
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"us_box.json" ofType:nil];
//NSData直接存储二进制数据
NSData *data = [NSData dataWithContentsOfFile:filePath];
//直接把文件里面的数据 解析放到 数组或者字典
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
5、description方法
// 复写description方法 ,能够实现%@打印输出
6、 //开源框架 sdWebImage gitHUb
https://github.com/rs/SDWebImage
7、星星实现思路
view1.backgroundColor = [UIColor colorWithPatternImage:image1];
8
//从xib创建出来的时候调用此方法
- (void)awakeFromNib
//当alloc 手动创建对象的时候调用此方法
- (id)initWithFrame:(CGRect)frame{
9
_yellowView.transform = CGAffineTransformMakeScale(scale, scale);
//transform 修改后以后坐标会发生变化
10 导航栏与TableView适配的问题
/**
*
两个设置
1 、edgesForExtendedLayout
//这个属性应用于容器控制器的子控制器
延伸方向设置,在iOS7里面导航栏是半透明,iOS7的风格是充满屏,如果是半透明的话,内容向上调整64,y的0点在屏幕0点。
默认是4个方向延伸,充满屏幕。
如果设置不延伸,则0点在导航栏下面。
This property is only applied to view controllers that are embedded in containers, such as UINavigationController or UITabBarController. View controllers set as the root view controller do not react to this property. Default value is UIRectEdgeAll.
scrollView要自动偏移必须是第一个子视图
2、automaticallyAdjustsScrollViewInsets
这个属性用于scrollView的自动调整,如果scrollView延伸到了屏幕0点,那么内容也在0点则会把内容遮挡住,这个属性默认为yes ,scrollView的内容向下偏移64,这样就不会遮挡
Default value is YES, which allows the view controller to adjust its scroll view insets in response to the screen areas consumed by the status bar, navigation bar, and toolbar or tab bar. Set to NO if you want to manage scroll view inset adjustments yourself, such as when there is more than one scroll view in the view hierarchy.
这里可以手动设置偏移
_tableView.contentInset = UIEdgeInsetsMake(64, 0, 49, 0);
第三天
课程目录:
上午
练习完成新闻列表页面
下午
1. 新闻列表数据的处理,加载Json数据,创建新闻Model
2. 使用storyboard定义新闻单元格,并且加载创建
3. 实现新闻单元格数据的填充展示
4. UICollectionView的概念
5. UICollectionView的使用
作业: 使用UICollectionView实现Top250的电影列表
效果图:
1、KVC为modal 赋值
//modal 中复写此方法 ,为dic中key和 modal中 变量不同名 的情况
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
if ([key isEqualToString:@"rating"]) {
NSDictionary *dic = value;
_average = [[dic objectForKey:@"average"] floatValue];
}
}
[modal setValuesForKeysWithDictionary:dic];
2、封装json数据读取类 的封装 DataService类
//把获取json数据的代码封装起来
3、common.h作用,定义宏
4、collectionView 使用
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;
// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
第四天
课程目录:
上午:
1. Top250列表的页面的实现
2. Top250列表采用UITableView实现思路讲解
3. 新闻列表页面,头条图片下拉放大的实现思路
4. 实现下拉新闻列表,头条图片放大
下午:
5. 头条图片新闻数据的加载
6. 手动加载storyboard中定义的控制器
7. BaseModel的用法
8. 图片列表的实现
作业:实现点击图片列表,模态视图弹出大图图片浏览
效果图:
第五天
课程目录:
上午:
1. 图片浏览页面的解耦合思路分析与数据处理
2. 图片浏览的错误实现分析
3. 图片浏览的正确实现思路讲解
4. 子类化UICollectionView的实现
5. 图片浏览的单元格实现
下午:
6. 图片浏览的双击缩放
7. 单击图片隐藏、显示导航栏和状态栏(ios6与ios7)
8. 单击、双击手势的冲突解决
作业:
效果图:
作业:
1.完成电影详情页面
2.数据:
* 电影详情:movie_detail.json
* 评论列表:movie_comment.json
知识点
1、手势对象
//添加手势 双击
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleAction)];
//手指的数量
doubleTap.numberOfTouchesRequired = 1;
//敲击的次数
doubleTap.numberOfTapsRequired = 2;
[self addGestureRecognizer:doubleTap];
//添加单击手势
//默认单击手势
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleAction)];
[self addGestureRecognizer:singleTap];
//双击的时候屏蔽单击手势
[singleTap requireGestureRecognizerToFail:doubleTap];
2、独立出来的图片浏览解耦合视图控制器
(1)PhotoViewController
(2) PhotoCollectionView —>UICollectionView
(3) PhotoCollectionViewCell —> UIColletionViewCell
(4) PhotoScrollView —> SCrollView
3、导航栏隐藏
用通知
BOOL isHiden = self.navigationController.navigationBar.hidden;
//注意用这个方法是 导航栏上空白
// [self.navigationController.navigationBar setHidden:!isHiden];
//这个方法会把下面的内容移动到顶部充满屏幕
[self.navigationController setNavigationBarHidden:!isHiden animated:YES];
4、通知
//接受隐藏导航栏的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideNavgationBar) name:@"HideNavgationBarNotification" object:nil];
//发送隐藏导航栏的通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"HideNavgationBarNotification" object:nil];
第六天
课程目录:
上午:
1. 海报页面的视图结构分析
2. 海报页面头部视图的创建
3. 箭头按钮点击控制头部视图的展开、收起显示
4. 向下轻扫展开头部视图、添加灰色笼罩视图
5. 海报列表的实现思路
6. 海报列表的子类化
下午:
7. 海报页面的数据的传递与处理
8. 单元格起始位置的设置
9. 单元格分页的实现思路与scrollView停止滑动协议方法的讲解
10. 海报图片分页滑动的实现
11. 点击海报图片翻转显示
12. 点击两侧海报居中显示
效果图:
作业:下拉索引海报、翻转后的电影详情
第七天
课程目录:
上午:
1. 学生自己练习完成下拉索引海报列表
2. 学生自己练习完成大图海报翻转,显示电影详情页面
讲解:
3. 海报图片滑动时,翻转状态的恢复
4. 实现索引海报列表
下午:
5. 重构海报图片,为大图浏览、小图浏览定义同一个基类,将相同代码定义在基类中
6. KVO实现大图、小图海报同步滑动的实现思路
7. 海报图片同步滑动的实现
8. 海报滑动时更换电影标题
9. 海报翻转显示电影详情
10. UIWebView的简单使用
11. Html标签的介绍与简单使用
12. 使用UIWebView加载新闻详情
效果图:
作业:电影详情页面的实现
效果图:
第八天
课程目录:
上午:
1. 电影详情页面界面的实现(代码讲解)
2. 评论列表单元格的实现(代码讲解)
3. 评论单元格的展开与收起
4. 更多页面在storyboard中使用静态单元格创建
5. 更多页面的缓存计算与清除
下午:
6. BaseModel的实现原理解析
7. 启动动画的实现
8. 内存泄漏的处理、野指针的排查
9. 内存警告的处理
效果图:
知识点
1、sdWebImage 清除缓存
#import "SDImageCache.h"
NSUInteger count = [[SDImageCache sharedImageCache] getSize];
cacheLable.text = [NSString stringWithFormat:@"%.1lfM",count / 1024 / 1024.0];
2、视频播放
// MPMoviePlayerViewController:视频播放控制器,需要导入<MediaPlayer/MediaPlayer.h>框架
MPMoviePlayerViewController *ctrl = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"http://vf1.mtime.cn/Video/2012/06/21/mp4/120621104820876931.mp4"]];
//将视频播放器弹出
[self presentMoviePlayerViewControllerAnimated:ctrl];
3、启动动画