GeekBand iOS應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)學(xué)習(xí)筆記(第四周)

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兩種尺寸磺送。


Size Class

布局時(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

UISwitch 的外觀(guān)

用代碼添加和修改屬性

UISwitch 的用法
UISwitch 的外觀(guān)定制

例子: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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末银萍,一起剝皮案震驚了整個(gè)濱河市变勇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖搀绣,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飞袋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡链患,警方通過(guò)查閱死者的電腦和手機(jī)巧鸭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)麻捻,“玉大人纲仍,你說(shuō)我怎么就攤上這事∶潮希” “怎么了郑叠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)明棍。 經(jīng)常有香客問(wèn)我乡革,道長(zhǎng),這世上最難降的妖魔是什么摊腋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任沸版,我火速辦了婚禮,結(jié)果婚禮上歌豺,老公的妹妹穿的比我還像新娘推穷。我一直安慰自己,他們只是感情好类咧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布馒铃。 她就那樣靜靜地躺著,像睡著了一般痕惋。 火紅的嫁衣襯著肌膚如雪区宇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天值戳,我揣著相機(jī)與錄音议谷,去河邊找鬼。 笑死堕虹,一個(gè)胖子當(dāng)著我的面吹牛卧晓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赴捞,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼逼裆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赦政?” 一聲冷哼從身側(cè)響起胜宇,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后桐愉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體财破,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年从诲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了左痢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盏求,死狀恐怖抖锥,靈堂內(nèi)的尸體忽然破棺而出亿眠,到底是詐尸還是另有隱情碎罚,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布纳像,位于F島的核電站荆烈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏竟趾。R本人自食惡果不足惜憔购,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岔帽。 院中可真熱鬧玫鸟,春花似錦、人聲如沸犀勒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贾费。三九已至钦购,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褂萧,已是汗流浹背押桃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留导犹,地道東北人唱凯。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谎痢,于是被迫代替她去往敵國(guó)和親磕昼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容