UIKit坐標(biāo)系
UIKit坐標(biāo)系起始點(diǎn)是屏幕的左上方(x = 0, y = 0)。向右移動(dòng)x軸增加索绪,向下移動(dòng)y軸增加。
CoreGraphics
縮寫(xiě)是CG贫悄,CGPoint{x, y}代表了在屏幕x,y位置上的一個(gè)點(diǎn)瑞驱,創(chuàng)建函數(shù)是CGPointMake(x, y)
創(chuàng)建了一個(gè)在x,y位置上的點(diǎn),相比較函數(shù)是CGPointEqualToPoint(p1, p2)
比較了p1和p2兩個(gè)點(diǎn)是否相等窄坦。
CGSize{width, height}代表了寬度為width高度為height的大小唤反,創(chuàng)建大小的函數(shù)是CGSizeMake(w, h)
,相比較的函數(shù)是CGSizeEqualToSize(sz1, sz2)
。
CGRect{origin, size}代表了一個(gè)矩形鸭津,原點(diǎn)是origin大小是size彤侍,創(chuàng)建大小的函數(shù)是CGRectMake(o, s)
,相比較的函數(shù)是CGRectEqualToRect(r1, r2)
,縮放的函數(shù)是CGRectInset(r, dx, dy)
將矩形r的寬縮小dx高縮小dy。
View的定位
Frame: 一個(gè)View對(duì)象自身在父類(lèi)View對(duì)象中的位置和大小逆趋,frame = { origin:{40, 160}, size:{400,400}}盏阶。表示一個(gè)View對(duì)象的左上角點(diǎn)的位置在父類(lèi)View對(duì)象x=40, y=60處,對(duì)象本身的大小是寬400高400闻书。UIView的初始化方法是:-[UIView initWithFrame:(CGRect)frame]
Bounds:一個(gè)View對(duì)象傳遞給子類(lèi)View對(duì)象的位置和大小信息名斟。Bounds的數(shù)據(jù)結(jié)構(gòu)和frame一致脑慧。例如:如果一個(gè)子類(lèi)的frame = { origin:{40, 160}, size:{400,400}},再將父類(lèi)Bounds的origin設(shè)置為{40, 160}(一般來(lái)說(shuō)Bounds的origin為{0,0})那么子類(lèi)的View將會(huì)出現(xiàn)在父類(lèi)的左上角砰盐,因?yàn)楦割?lèi)的origin為{40,160}也就是x從40開(kāi)始闷袒,y從160開(kāi)始。
Center:是一個(gè)View的中心點(diǎn)岩梳,對(duì)于View對(duì)象本身來(lái)說(shuō)位置為origin{x + width/2, y + height/2}
Autoresizing
UIView的autoresizingMask可以指定本View和父View之間的關(guān)系囊骤。FlexibleWidth和FlexibleHeight指定了本身的寬和高可以根據(jù)父類(lèi)的變化而變化。FlexibleTopMargin,FlexibleBottomMargin,FlexibleleftMargin,FlexibleRightMargin指定了本View的邊和父View上下左右邊的距離可以變化冀值。(注:未設(shè)置為Flexible屬性的話(huà)全部默認(rèn)是不可以變動(dòng)的)
Autoresizing是在iOS6之前使用的比較多淘捡,現(xiàn)在的版本在用interface設(shè)置autoresizing時(shí)需要將Auto Layout關(guān)掉。從nib中定義的view默認(rèn)都開(kāi)著autoresizing池摧。
Autolayout
Autolayout是用約束條件(constraint)描述View定位屬性之間的關(guān)系焦除,相比較autoresizing(只可以定位本身和父類(lèi)的關(guān)系)autolayout可以支持更加復(fù)雜的多視圖類(lèi)定位關(guān)系。
constraint用來(lái)表示類(lèi)視圖之間的線(xiàn)性關(guān)系作彤。通過(guò)設(shè)置constraint屬性UIView對(duì)象可以按照我們希望的定位和大小出現(xiàn)在不同分辨率的iOS設(shè)備屏幕上膘魄。
Autolayout可以通過(guò)nib的“Use Auto Layout”選項(xiàng)打開(kāi),或者用代碼直接添加constraint竭讳,還可以將UIView子類(lèi)的requiresConstraintBasedLayout方法重載创葡,返回YES。(也可以返回NO來(lái)關(guān)閉Autolayout)
AutolayoutConstraint的常用屬性:
Leading Space to Container Margin:前方(字符串開(kāi)始的方向)與邊界保持距離
Trailing Space to Container Margin:后方(字符串結(jié)束的方向)與邊界保持距離
Vertical Space to Top Layout Guide:頂部與上方邊界保持距離
Vertical Space to Bottom Layout Guide:底部與下方邊界保持距離
Center Horizontally in Container:水平居中
Center Vertically in Container:垂直居中
在storyboard編輯框的右下角還有幾個(gè)按鈕也是用來(lái)調(diào)節(jié)AutolayoutConstraint屬性的绢慢。
Stack按鈕可以把幾個(gè)UIVIew對(duì)象打包成一組灿渴,成組編輯可以調(diào)節(jié)其水平或垂直排列。Align按鈕調(diào)節(jié)對(duì)齊胰舆。Pin按鈕調(diào)節(jié)邊距骚露。Resolve Auto Layout Issues按鈕可以刷新界面看到調(diào)節(jié)后的結(jié)果,或者讓電腦設(shè)置一個(gè)推薦的AutolayoutConstraint屬性缚窿。
隨著iOS設(shè)備產(chǎn)品線(xiàn)的越來(lái)越豐富棘幸,有了更多不同的屏幕分辨率,iOS9以后也增加了分屏功能倦零,這樣程序的窗口分變率必須要能根據(jù)用戶(hù)的需求而改變误续。
Trait(設(shè)備特性)可以返回設(shè)備的屬性,首先要遵守UITraitEnvironment protocol協(xié)議扫茅,UIScreen, UIWindow, UIViewController, UIPresentationController, UIView這些跟屏幕顯示有關(guān)的類(lèi)都遵守了該協(xié)議蹋嵌。遵守該協(xié)議的類(lèi)都有.traitCollection屬性,該屬性有4類(lèi)信息:1葫隙、 vertiacl/horizontalSizeClass表示屏幕的邏輯大小栽烂,有垂直和水平兩個(gè)值。2、displayScale表示一個(gè)邏輯點(diǎn)會(huì)映射幾個(gè)像素愕鼓。3钙态、userInterfaceIdiom用來(lái)表示是iphone類(lèi)設(shè)備還是ipad類(lèi)設(shè)備慧起。4菇晃、forceTouchCapability用來(lái)判斷設(shè)備是否支持壓感反應(yīng)。
Size Class:用來(lái)表示設(shè)備屏幕邊長(zhǎng)的大小蚓挤,只分為緊湊Compact和正常Regular兩種尺寸磺送。
布局時(shí)View的大小
View布局時(shí)有個(gè)屬性叫Aligment Rectangle
通過(guò)alignmentRectForFrame:方法傳遞View的frame進(jìn)去將返回一個(gè)Aligment Rectangle,算法是Aligment Rectangle = frame - alignmentRectInsets
反之通過(guò)frameForAlignmentRect:方法傳AlignmentRect進(jìn)去將返回frame灿意。
aligmentRectInsets是View的顯示界面和對(duì)其界面的相差面積(默認(rèn)aligmentRectInsets是零估灿,所以顯示界面和對(duì)其界面默認(rèn)是重合的)。
固有尺寸(Intrinsic Content Size)
有一些界面組件可以提供自己的固定尺寸
UIVIew不能提供自身的固定尺寸缤剧,其自身大小必須要由constraint按照屏幕布局經(jīng)過(guò)計(jì)算后得出適合的尺寸馅袁。
Slider可以提供自身的固定width參數(shù),Label荒辕,Button, Switch, TextField可以提供固定的width和height參數(shù)汗销。TextView和ImageView的固有尺寸是可變的,可以根據(jù)constraint的參數(shù)和布局推算出來(lái)抵窒。
當(dāng)界面的大小需要通過(guò)constraint推算出來(lái)的時(shí)候弛针,可以提供一些參數(shù)讓constraint做為推算依據(jù)。
Content Hugging表示要不要拉伸或增加額外空間(padding),默認(rèn)的優(yōu)先級(jí)是250(優(yōu)先級(jí)越低的條件越容易被犧牲李皇,優(yōu)先級(jí)1000是最大削茁,表示條件必須執(zhí)行)。
Content Compression Resistance表示要不要被壓縮掉房,默認(rèn)優(yōu)先級(jí)是750茧跋。
布局相關(guān)調(diào)用
updateConstraints
不能直接調(diào)用updateConstraints。
updateConstraintIfNeeded 在有必要的情況下才刷新界面布局卓囚,如果沒(méi)有變化就不刷新厌衔。
setNeedsUpdateConstraints 直接刷新界面布局,不管有沒(méi)有變化捍岳,先刷新一遍富寿。
layoutSubviews
使用autolayout時(shí)必須先調(diào)用父類(lèi)
layoutIfNeeded和setNeedsLayout函數(shù)和上面updateConstraints調(diào)用函數(shù)的用法類(lèi)似。
更多的系統(tǒng)UI組件
UIKit Catalog文檔
UIKit Catalog例子
界面組件的分類(lèi)
以展示/導(dǎo)航為主的界面稱(chēng)為View
UIActivityIndicatorView
UIAlertController
UIImageView
UIPickerView
UIProgressView
UISearchBar
UISearchController
UIStackView
UITextView
UIToolbar
以操作響應(yīng)為主的稱(chēng)為Control
UIButton
UIPageControl
UISegmentedControl
UITextField
UISlider
UIStepper
UISwitch
一個(gè)控件的基本用法
例子:UISwitch
用代碼添加和修改屬性
例子:UIWebView(建議在iOS8以后使用WKWebView)
UIWebView可以瀏覽網(wǎng)頁(yè)锣夹,還可以瀏覽系統(tǒng)支持的各種格式的文檔(PDF页徐,WORD,KINDLE等)
創(chuàng)建
initWithFrame:(CGRect)
內(nèi)容來(lái)源
load方法
loadRequest:(NSURLRequest*) 從網(wǎng)上加載一個(gè)文檔
loadData:MIMEType:textEncodingName:baseURL:
loadHTMLString:baseURL:
交互控制
網(wǎng)絡(luò)訪(fǎng)問(wèn):.loading; .request; -stopLoading; -reload;
導(dǎo)航:-goBack; goForward;
JavaScript調(diào)用:-stringByEvaluatingJavaScriptFromString:
.delegate