1. 程式人生 > >2015年07月15日第10天筆記

2015年07月15日第10天筆記

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(正常, 大), 一般用 + 表示