2015年07月15日第10天笔记

时间:2021-10-09 11:48:04

1.屏幕的发展过程导致屏幕适配的技术在更新

1)4S以前屏幕不变,且应用程序没有横屏和竖屏都存在的,于是用的是frame技术
2)ipad的出现,1)屏幕改变 2)横屏和竖屏都存在,于是出现了autoresizing技术:解决父子关系
3)5以后,横屏和竖屏的应用变的越来越多,要求不仅可以解决父子关,还可以解决兄弟关系,于是出现了autolayout技术
4)6后,为了适应不同屏幕出现了size classes技术

  1. 屏幕适配的发展总结:
    通过代码计算 frame -> autoresizing(通过设置子控件与父控件的关系来决定如何显示控件) -> autolayout(通过设置某控件与任意其他控件间的关系来决定如何显示这个控件, 不仅仅局限与父子控件) -> size classes(通过 size classes + autolayout实现针对不同屏幕为控件设置不同的约束)

[自己]案例分析
练习08-游戏图片设置
图片设置(4寸适配其它小寸)
1)让图片左右间距相对于父控件左右边界:拖向父控件。x,隐含w
2)让图片垂直中心和父控件一样,这将如果小于4寸,会保证从垂直中心上下正常。y
3)设置高。h
设置set按钮
1)设置宽高。w,h
2)设置左间距到到父控件左边界。x
3)设置中心Y相对于图片中心Y。y
设置no按钮

练习09-分屏刘亦菲
1)蓝色背景宽高 = 屏宽高*0.5;拖向父控件:隐含h,w
2)刘亦菲标签:高固定h
左右边到父控件边界。隐含x,w
底同父控件底 隐含y
3)刘亦菲图片:宽高固定w,h
中心x,y同父控件中心x,y

2015年07月17日08:48:09
考试答案代码分析
1.UI设计
1)拖入了一个占全屏scrollView控件
2)然后进行连线
2.控制器设计
1)定义两个宏定义:图片个数,图片显示的列数
2)定义一个存放UIImage对象的可变数组
3)懒加载:创建一个图片个数大小的数组
遍历图片个数,生成UIImage对象,塞入数组,并返回
4)主题思想:点击添加,重新加载当前数组里所有图片
3.代码实现
1)每次添加之前移除之前添加的按钮控件

for(UIView *sView in self.scrollView.subviews)
{
    if([sView isKindOfClass:[UIButton Class]]) {
        [sView removeFromSuperView];
    }
}

2)添加之前判断:是否是最后一个;
判断之前先创建一个按钮,并添加到父控件;
根据判断添加不同的按钮图片
在最后一个按钮,添加点击事件;同时计算并设置scrollView滚动范围:(0,当前按钮下边Y +下边距)
3)全部循环后,将scrollView滚动到指定位置:滚动的最大高度-屏幕高度(移动了的位置)
4)点击事件方法
从数组中随机取到一个UIImage对象,然后放在可变数组里
重新加载数据
4.细节归纳
1)获取屏幕宽度
CGFloat SreenW = [UIScreen mainScreen].bounds.size.width;
2)创建一个普通模式的按钮
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
3)scrollView的contentOffset是一个CGPoin类型
4)随机取图片:根据数组个数,生成一个不大于数组个数的数
UIImage *image = self.imageDatas[arc4random_uniform(ImageCount)];

用autolayout约束实现微博项目的布局分析
1.UI设计
头像图片
1)宽高固定
2)左上固定
名称Label
1)高度固定
2)中心y同头像图片y
3)和左右控件固定,x,w
vip图片
1)宽高固定,w,h
2)中心y同头像图片y
3)和左控件固定x
正文Label
1)上下左右固定
配图
1)宽高固定
2)左上固定
分割线Label
1)高度为1
2)上下左右固定

细节归纳
1.当选择用UITableViewController控件在Main.storyboard文件里的时候
把那个继承的控制器类在面板修改后发现修改无效,根本原因如下:

1)这个控制器类文件继承的不是UITableViewController类,它默认继承的是ViewController类
2)解决:这个类文件的继承类改为UITableViewController,就可以修改了

size classes 的使用
* 从 iOS8开始才支持 size classes
* size classes本质就是对所有的屏幕进行了分类, 我们可以为不同类型的屏幕设置不同的约束;显示不一样的控件
* 仅仅是对屏幕进行了分类, 真正排布UI元素还得使用autolayout
* 不再有横竖屏的概念, 只有屏幕尺寸的概念
* 不再有具体尺寸的概念, 只有抽象尺寸的概念
* 把宽度和高度各分为3种情况
1> any(任意, 表示既可以是 compact, 也可以是 regular), 一般用 * 表示
2> compact(紧凑, 小), 一般用 - 表示
3> regular(正常, 大), 一般用 + 表示