UI常用的控件

#iOS開發(fā)之UI篇#iOS開發(fā)之UI篇

#常用控件介紹1##

#UI第09天:滾動(dòng)視圖#

##UIScrollView入門##

移動(dòng)設(shè)備的屏幕?小是極其有限的,因此直接展?在?戶眼前的內(nèi)容也相當(dāng)有限,當(dāng)展?的內(nèi)容較多超出一個(gè)屏幕時(shí),用戶可通過滾動(dòng)操作來查看屏幕以外的內(nèi)容,普通的UIView不具備滾動(dòng)功能,不能顯?過多的內(nèi)容。UIScrollView是一個(gè)能夠滾動(dòng)的視圖控件,可以?用來展?大量的內(nèi)容,并且可以通過滾動(dòng)查看所有的內(nèi)容。

UIScollView的常用屬性和方法:

- contentOffset屬性:UIScrollView滾動(dòng)的位置

- contentSize屬性:UIScrollView內(nèi)容的尺?寸(相當(dāng)于滾動(dòng)的范圍)

- bounces屬性:設(shè)置UIScrollView是否需要彈簧效果

- alwaysBounceVertical屬性:設(shè)置垂直方向是否有彈簧效果(必須在bounces設(shè)置為YES的前提下設(shè)置才有效)

- alwaysBounceHorizontal屬性:設(shè)置水平方向是否有彈簧效果(必須在bounces設(shè)置為YES的前提下設(shè)置才有效)

- pagingEnabled屬性:設(shè)置UIScrollView的滾動(dòng)方式是否為翻頁效果

- scrollEnabled屬性:設(shè)置UIScrollView是否能滾動(dòng)

- showsHorizontalScrollIndicator屬性:是否顯示水平方向的滑動(dòng)條

- showsVerticalScrollIndicator屬性:是否顯示垂直方向的滑動(dòng)條

- scrollIndicatorInsets屬性:設(shè)置滾動(dòng)條的位置,可以通過UIEdgeInsetsMake函數(shù)來指定該位置

- indicatorStyle屬性:設(shè)置滾動(dòng)條的風(fēng)格,有三個(gè)可選項(xiàng):UIScrollViewIndicatorStyleDefault(灰)、UIScrollViewIndicatorStyleBlack(黑)、UIScrollViewIndicatorStyleWhite(白)

- decelerationRate屬性:減速的速率

- scrollsToTop屬性:設(shè)置點(diǎn)擊狀態(tài)欄是否滑動(dòng)到scrollView的頂部

- -setContentOffset:animated:方法:設(shè)置scrollView的位置

- -scrollRectToVisible:animated:方法:將指定的區(qū)域滾動(dòng)到可視范圍之內(nèi),如果該地區(qū)已經(jīng)在可視區(qū)域,則什么都不做。

UITextView退出鍵盤幾種方式:

1. 如果應(yīng)用有導(dǎo)航條的,可以在導(dǎo)航條上面加多一個(gè)Done的按鈕,用來退出鍵盤,當(dāng)然要先實(shí)UITextViewDelegate

2. 如果UITextView中不使用回車鍵,可以把回車鍵當(dāng)做退出鍵盤的響應(yīng)鍵

3. 自定義其他加載鍵盤上面用來退出,比如在彈出的鍵盤上面加一個(gè)view來放置退出鍵盤的Done按鈕

4. 點(diǎn)擊其他區(qū)域收起鍵盤

UITextView相當(dāng)于是高級(jí)版本的UILabel和UITextField的合體。

UITextView的常用屬性:

-? editable屬性:設(shè)置UITextView能否編輯,如果不編輯就當(dāng)做UILabel顯示,可以設(shè)置自動(dòng)識(shí)別電話號(hào)碼、地址、郵箱,該屬性默認(rèn)為YES

-? dataDetectorTypes屬性:設(shè)置UITextView是否支持識(shí)別電話號(hào)碼、地址、郵箱等內(nèi)容

-? inputView:當(dāng)UITextView成為第一響應(yīng)者時(shí)顯示的輸入視圖

-? inputAccessoryView:當(dāng)UITextView成為第一響應(yīng)者時(shí)顯示的輸入輔助視圖,在inputView的上方

下面的例子演示了如何使用UITextView以及如何進(jìn)行數(shù)據(jù)偵測和拼寫檢查。

###事件概述###

事件是當(dāng)用戶手指觸擊屏幕及在屏幕上移動(dòng)時(shí),系統(tǒng)將事件按照特定的路徑傳遞給可以對(duì)其進(jìn)行處理的對(duì)象。在iOS中,一個(gè)UITouch對(duì)象表示一個(gè)觸摸,一個(gè)UIEvent對(duì)象表示一個(gè)事件。事件對(duì)象中包含與當(dāng)前多點(diǎn)觸摸序列相對(duì)應(yīng)的所有觸摸對(duì)象,還可以提供與特定視圖或窗口相關(guān)聯(lián)的觸摸對(duì)象。

響應(yīng)者對(duì)象是可以響應(yīng)事件并對(duì)其進(jìn)行處理的對(duì)象。UIResponder是所有響應(yīng)者對(duì)象的基類,它不僅為事件處理,而且也為常見的響應(yīng)者行為定義編程接口。UIApplication、UIView和所有從UIView派生出來的UIKit類(包括UIWindow)都直接或間接地繼承自UIResponder類。第一響應(yīng)者是應(yīng)用程序中當(dāng)前負(fù)責(zé)接收觸摸事件的響應(yīng)者對(duì)象(通常是一個(gè)UIView對(duì)象)。UIWindow對(duì)象以消息的形式將事件發(fā)送給第一響應(yīng)者,使其有機(jī)會(huì)首先處理事件。如果第一響應(yīng)者沒有進(jìn)行處理,系統(tǒng)就將事件(通過消息)傳遞給響應(yīng)者鏈中的下一個(gè)響應(yīng)者,看看它是否可以進(jìn)行處理。

試著點(diǎn)擊屏幕上圈出來的幾個(gè)區(qū)域,看看會(huì)發(fā)生什么并解釋為什么。

![這里寫圖片描述](http://img.blog.csdn.net/20150826223152792)

###響應(yīng)者鏈處理原則###

1. 點(diǎn)擊檢測視圖或者第一響應(yīng)者傳遞事件或動(dòng)作消息給它的視圖控制器(如果它有的話);如果沒有一個(gè)視圖控制器,就傳遞給它的父視圖。

2. 如果一個(gè)視圖或者它的視圖控制器不能處理這個(gè)事件或動(dòng)作消息,它將傳遞給該視圖的父視圖。

3. 在這個(gè)視圖層次中的每個(gè)后續(xù)的父視圖遵循上述的模式,如果它不能處理這個(gè)事件或動(dòng)作消息的話。

4. 最頂層的視圖如果不能處理這個(gè)事件或動(dòng)作消息,就傳遞給UIWindow對(duì)象來處理。

5. 如果UIWindow 對(duì)象不能處理,就傳給單件應(yīng)用程序?qū)ο骍IApplication。

6. 如果應(yīng)用程序?qū)ο笠膊荒芴幚磉@個(gè)事件或動(dòng)作消息,將拋棄它。

##iOS中的手勢操作##

手勢操作是通過使用者的手指觸控,計(jì)算手指移動(dòng)軌跡、坐標(biāo),然后對(duì)程序做相應(yīng)處理的過程。手勢操作需要添加手勢識(shí)別器,所有手勢識(shí)別器公共的父類是UIGestureRecognizer。

###各種手勢的使用###

- 點(diǎn)擊手勢:UITapGestureRecognizer

- 長按手勢:UILongPressGestureRecognizer

- 旋轉(zhuǎn)手勢:UIRotationGestureRecognizer

- 捏合手勢:UIPinchGestureRecognizer

- 滑動(dòng)手勢:UISwipeGestureRecognizer

- 拖動(dòng)手勢:UIPanGestureRecognizer

###事件的分發(fā)機(jī)制###

**問題:**當(dāng)有多個(gè)重疊的UIView時(shí),誰是第一響應(yīng)者

1. 默認(rèn)的點(diǎn)擊順序是按照UIView中subviews的逆順序

2. 如果UIView的同級(jí)別subviews中有重疊的部分,則優(yōu)先檢查頂部的subview,如果頂部的subview返回nil,再檢查底部的subview。

###事件的分類###

1. Touch Events(多點(diǎn)觸摸事件)

- touchesBegan:withEvent:方法:一個(gè)或多個(gè)手指置于視圖或窗口上

- touchesMoved:withEvent:方法:一個(gè)或多個(gè)手指在移動(dòng)

- touchesEnded:withEvent:方法:一個(gè)或多個(gè)手指離開視圖或窗口

- touchesCancelled:withEvent:方法:如果其他系統(tǒng)事件(如內(nèi)存不足警告)使得觸摸被取消

2. Motion Events(運(yùn)動(dòng)事件)

- motionBegan:withEvent:方法:運(yùn)動(dòng)事件開始

- motionEnded:withEvent:方法:運(yùn)動(dòng)事件結(jié)束

- motionCancelled:withEvent:方法:運(yùn)動(dòng)事件取消

>**說明:**如果要搖一搖之類的應(yīng)用,就可以使用運(yùn)動(dòng)事件進(jìn)行處理,代碼如下所示。

###UISegmentControl###

![這里寫圖片描述](http://img.blog.csdn.net/20150825010459561)

###UISlider###

![這里寫圖片描述](http://img.blog.csdn.net/20150825010513751)

###UISwitch###

![這里寫圖片描述](http://img.blog.csdn.net/20150825010525227)

###UIActivityIndicatorView###

![這里寫圖片描述](http://img.blog.csdn.net/20150825010541225)

###UIProgressView###

![這里寫圖片描述](http://img.blog.csdn.net/20150825010558494)

###UIStepper###

![這里寫圖片描述](http://img.blog.csdn.net/20150825010613452)

###UIDatePicker###

![這里寫圖片描述](http://img.blog.csdn.net/20150825015957494)

##常用控件介紹2##

###UIWebView和JavaScript調(diào)用###

UIWebView用于在App中嵌入網(wǎng)頁內(nèi)容,通常情況下是html格式的網(wǎng)頁,也支持pdf文檔等其他格式(這取決于瀏覽器內(nèi)核,手機(jī)上的瀏覽器內(nèi)核通常為WebKit)。

##UIToolbar##

每個(gè)導(dǎo)航控制器,還配備了工具條(44坐標(biāo)高),默認(rèn)隱藏,可以通過將導(dǎo)航視圖控制器的toolBarHidden屬性設(shè)置為NO使其顯示。工具條屬于UINavigationController,一個(gè)導(dǎo)航控制器,只有一個(gè)工具條。工具條上的toolBarItem屬于每個(gè)視圖控制器,每個(gè)視圖控制器可以單獨(dú)定制工具條上的每個(gè)項(xiàng)。

###顯示UINavigationController自帶的UIToolbar###

- toolBarHidden屬性:設(shè)置為NO可以顯示自帶的工具條

###創(chuàng)建導(dǎo)航控制器###

- -initWithRootViewController::在創(chuàng)建導(dǎo)航控制器時(shí)指定根視圖控制器

- -initWithNavigationBarClass:toobarClass::用指定的導(dǎo)航條創(chuàng)建導(dǎo)航視圖控制器

###控制器的入棧和出棧###

- -pushViewController:animated:方法:將一個(gè)視圖控制器壓入棧中

- -popViewControllerAnimated:方法:從棧中彈出一個(gè)視圖控制器

- -popToRootViewControllerAnimated:方法:從棧中直接彈出根視圖控制器

- -popToViewController:animated:方法:從棧中彈出指定的視圖控制器

![這里寫圖片描述](http://img.blog.csdn.net/20150824074059298)

可以通過UINavigationController的viewControllers屬性獲得其棧中保存的所有視圖控制器;topViewController可以獲得棧頂?shù)囊晥D控制器。

##UINavigationBar##

一個(gè)導(dǎo)航視圖控制器通常是由以下幾個(gè)部分構(gòu)成的:

![這里寫圖片描述](http://img.blog.csdn.net/20150824074114313)

###導(dǎo)航條半透明以及相關(guān)坐標(biāo)計(jì)算###

導(dǎo)航視圖控制器會(huì)維持一個(gè)導(dǎo)航條(UINavigationBar),這個(gè)導(dǎo)航條被所有的視圖控制器共享,可以通過UINavigationController對(duì)象navigationBar屬性獲得導(dǎo)航條,再通過下面的屬性設(shè)置其半透明效果,注意對(duì)導(dǎo)航條的設(shè)置將對(duì)所有的視圖控制器生效。

- translucent屬性:設(shè)置導(dǎo)航條是否半透明,默認(rèn)值是YES。對(duì)此屬性的設(shè)置會(huì)影響到坐標(biāo)的計(jì)算,因?yàn)閷?dǎo)航條有44點(diǎn)的高度。例如在視圖控制控制器中放置一個(gè)按鈕,其frame屬性的第二個(gè)參數(shù)設(shè)置為100,那么在設(shè)置半透明為YES和NO的情況下按鈕的呈現(xiàn)效果如下圖所示??梢钥闯鲈O(shè)置半透明后的按鈕坐標(biāo)計(jì)算是以窗口頂端為參考系的,而不透明的時(shí)候按鈕坐標(biāo)是相對(duì)于導(dǎo)航條的,相差了44個(gè)點(diǎn)。

![這里寫圖片描述](http://img.blog.csdn.net/20150705100648644)??![這里寫圖片描述](http://img.blog.csdn.net/20150705100659936)

###設(shè)置背景圖片###

- -setBackgroundImage:forBarMetrics:

- -setBackgroundImage:forBarPosition:barMetrics:

>**說明:**UIBarPostion和UIBarMetrics都是枚舉類型,前者表示導(dǎo)航欄的位置;后者表示導(dǎo)航欄的外觀。前者可能的取值包括:UIBarPositionAny(不指定位置)、UIBarPositionBottom(位于視圖底部)、UIBarPositionTop(位于視圖頂部)和UIBarPositionTopAttached(位于屏幕頂部同時(shí)也在其視圖的頂部);后者可能的取值包括:UIBarMetricsDefault(設(shè)備默認(rèn)的外觀)、UIBarMetricsCompact(手機(jī)尺寸的外觀)等。

###隱藏和顯示導(dǎo)航條###

- navigationBarHidden屬性:是否隱藏導(dǎo)航控制欄

##UINavigationItem##

通過視圖控制器的navigationItem屬性可以獲得和視圖控制器對(duì)應(yīng)的導(dǎo)航欄項(xiàng),該屬性是只讀的,但是通過它的子屬性可以對(duì)UINavigationItem進(jìn)行定制。可以定制的內(nèi)容包括:

- leftBarButtonItem/leftBarButtonItems屬性:定制左側(cè)導(dǎo)航項(xiàng)

- rightBarButtonItem/rightBarButtonItems屬性:定制右側(cè)導(dǎo)航項(xiàng)

- backBarButtonItem屬性:定制返回項(xiàng)

- title屬性:導(dǎo)航項(xiàng)的標(biāo)題

- prompt屬性:導(dǎo)航項(xiàng)的提示

- titleView屬性:導(dǎo)航項(xiàng)標(biāo)題視圖,該屬性可以是任意UIView及其子類型,因此可以在此隨意定制自己想要的東西

>**說明:**由于navigationItem是每個(gè)視圖持有自己的navigationItem,因此可以為每個(gè)視圖定制不同的導(dǎo)航項(xiàng)。

如果當(dāng)前視圖控制器通過navigationItem設(shè)置了leftBarButtonItem,則顯示當(dāng)前視圖控制器設(shè)置好的leftBarButtonItem;如果當(dāng)前視圖控制器沒有設(shè)置leftBarButtonItem,且當(dāng)前視圖控制器不是根視圖控制器,顯示上一層的backBarButtonItem;如果上一層沒有指定backBarButtonItem,系統(tǒng)將根據(jù)上一層視圖控制器的標(biāo)題自動(dòng)生成一個(gè)返回按鈕;如果當(dāng)前視圖控制器沒有設(shè)置leftBarButtonItem且當(dāng)前視圖控制器是根視圖控制器,則左邊不顯示任何東西。

如果當(dāng)前視圖控制器通過navigationItem屬性定制了titleView,那么將會(huì)顯示自定義的titleView,titleView的高度不應(yīng)該超過導(dǎo)航條的高度;如果當(dāng)前視圖控制器沒有定制titleView,系統(tǒng)會(huì)根據(jù)當(dāng)前視圖控制器的標(biāo)題或者navigationItem的標(biāo)題創(chuàng)建一個(gè)UILabel來顯示此標(biāo)題;navigationItem的標(biāo)題優(yōu)于視圖控制器的標(biāo)題。

>**強(qiáng)調(diào):**UINavigationController本身并不顯示無需定制,UINavigationBar屬于導(dǎo)航控制器(子對(duì)象),它使被多個(gè)視圖共享的,當(dāng)你切換視圖控制器時(shí),導(dǎo)航欄并沒有切換,如果需要定制導(dǎo)航視圖控制器就需要定制導(dǎo)航欄以及導(dǎo)航欄上的項(xiàng)目UINavigationItem。我們可以讓每個(gè)視圖控制器都有自己的UINavigationItem,并按照自己的意愿來創(chuàng)建它。

#UITextField控件##

###UITextFiled常用屬性和方法###

UITextField是常用的文本輸入控件,比如我們用的QQ的登錄界面,詞典輸入要查詢的單詞都使用了文本框控件,如下圖所示。之前介紹的UILabel可以在界面中顯示文本,但用戶無法選擇或編輯UILabel中的文本,想接受用戶輸入文本,就可以使用UITextField控件。當(dāng)我們?cè)谟脩艚缑嫔宵c(diǎn)擊文本框時(shí),屏幕底部會(huì)彈出鍵盤,用于向文本框中輸入文字。

- borderStyle屬性:邊框樣式(UITextBorderStyleNone, UITextBorderStyleBezel, UITextBorderStyleLine, UITextBorderStyleRoundedRect)

- background屬性:背景圖

- backgroundColor屬性:背景色

- placeHolder屬性:沒有輸入內(nèi)容時(shí)的占位符

- text屬性:文字

- textColor屬性:文字顏色

- textAligment屬性:對(duì)齊方式

- font屬性:字體

- enabled屬性:是否可編輯

- secureTextEntry屬性:是否使用掩碼

- adjustsFontSizeToFitWidth屬性:是否調(diào)整字體大小適應(yīng)寬度

- leftView / leftViewMode屬性:左視圖(可以定制文本框)/ 左視圖模式

- rightView / rightViewMode屬性:右視圖(可以定制文本框,可能會(huì)覆蓋掉清除文字的按鈕)/ 右視圖模式

- inputView / inputAccessoryView屬性:輸入/輔助視圖(可以完成鍵盤的定制,可以在原始的鍵盤上設(shè)置二級(jí)鍵盤)

- -becomeFirstResponder方法:成為第一響應(yīng)者

- -resignFirstResponder方法:放棄第一響應(yīng)者

#CALayer##

###UIView和CALayer的關(guān)系###

UIView和CALayer是相互依賴的關(guān)系,UIView依賴與CALayer提供的內(nèi)容,CALayer依賴UIView提供的容器來顯示繪制的內(nèi)容。CALayer基于圖像管理內(nèi)容并允許你在這些內(nèi)容上創(chuàng)建動(dòng)畫。如果沒有CALayer,UIView自身也不會(huì)存在,UIView是一個(gè)特殊的CALayer實(shí)現(xiàn),添加了響應(yīng)事件的能力。一言以蔽之,UIView來自CALayer,高于CALayer,是CALayer高層實(shí)現(xiàn)與封裝;UIView的很多特性都源于CALayer對(duì)它的支持。

###通過CALayer改變UIView的形狀###

- borderColor屬性:邊框顏色。

- borderWidth屬性:邊框?qū)挾取?/p>

- cornerRadius屬性:邊框轉(zhuǎn)角半徑(實(shí)現(xiàn)圓角效果)。

###通過CALayer添加動(dòng)畫效果###

- transforms屬性:指定對(duì)CALayer中的內(nèi)容做怎樣的變換,支持3D效果和動(dòng)畫。

##UIImageView的使用##

UIImageView對(duì)象提供了一個(gè)基于視圖的容器來展示一張或者一系列圖像,同時(shí)也支持以動(dòng)畫的方式來呈現(xiàn)一組圖像(可以指定播放間隔和頻率)。簡單的說,UIImageView就是UIImage對(duì)象的承載者,當(dāng)需要將UIImage呈現(xiàn)在UIView上時(shí)就需要UIImageView。二者的關(guān)系就像UILabel和NSString之間的關(guān)系。

###UIImageView的創(chuàng)建和使用###

- - initWithImage:方法:這種方式適合創(chuàng)建小圖片,尤其是素材類圖片。

###UIImageView的常用屬性和方法##

- contentMode屬性:圖片的填充模式。(繼承自UIView)

- clipsToBounds屬性:修剪超出邊界的部分。(繼承自UIView)

- animationImages屬性:裝在用于動(dòng)畫的圖像的數(shù)組。

- animationDuration屬性:動(dòng)畫播放的持續(xù)時(shí)間。

- animationRepeatCount屬性:動(dòng)畫的重復(fù)次數(shù),0表示循環(huán)播放。

- - startAnimating方法:開始播放動(dòng)畫。

- - stopAnimating方法:停止播放動(dòng)畫。

- - isAnimating方法:返回BOOL值表示動(dòng)畫是否正在播放中。

#UIView的基本屬性和方法

與UIView外觀相關(guān)的屬性:

之前我們說過,UIView可以代表屏幕上的一塊矩形區(qū)域,它負(fù)責(zé)內(nèi)容的顯示、定位以及響應(yīng)用戶的觸摸事件,是用戶和應(yīng)用進(jìn)行交互的主要方式,我們?cè)賮砜纯碪IView的屬性和方法。

繪制和更新視圖的方法

- -drawRect:方法:繪圖(可以使用貝塞爾曲線進(jìn)行繪圖)

- -setNeedsDisplay方法:讓整個(gè)視圖重繪

- -setNeedsDisplayInRect:方法:讓視圖指定的矩形區(qū)域重繪

管理手勢操作的方法

- -addGestureRecognizer:方法:添加手勢識(shí)別器

- -removeGestureRecognizer:方法:刪除手勢識(shí)別器

使用Block語法設(shè)置動(dòng)畫的類方法

- +animateWithDuration:animations:類方法:用指定的持續(xù)時(shí)間完成通過Block指定的動(dòng)畫

為視圖添加動(dòng)畫效果的類方法

- + beginAnimations:context:類方法:開始一個(gè)動(dòng)畫

- + commitAnimations類方法:執(zhí)行動(dòng)畫

- + setAnimationStartDate:類方法:設(shè)置動(dòng)畫開始時(shí)間

- + setAnimationDuration:類方法:設(shè)置動(dòng)畫持續(xù)時(shí)間

- + setAnimationDelay:類方法:設(shè)置延遲多少時(shí)間播放動(dòng)畫

- + setAnimationRepeatCount:類方法:設(shè)置動(dòng)畫重復(fù)播放次數(shù)

- + setAnimationRepeatAutoreverses:類方法:設(shè)置是否反向執(zhí)行動(dòng)畫

- + setAnimationTransition:forView:cache:類方法:設(shè)置動(dòng)畫的執(zhí)行效果以及作用于哪個(gè)視圖

- backgroundColor:背景顏色

- hidden屬性:是否隱藏

- alpha屬性:透明程度

- opaque屬性:是否不透明

- clipsToBounds:是否剪裁超出邊界的部分

- layer屬性:渲染視圖的CA層

設(shè)置視圖尺寸位置的屬性:

- frame屬性:視圖相對(duì)于窗口的坐標(biāo)和尺寸

- bounds屬性:視圖相對(duì)于自己坐標(biāo)和尺寸

- center屬性:視圖的中心點(diǎn)

管理視圖層次結(jié)構(gòu)的屬性和方法:

- window屬性:視圖所在的窗口對(duì)象

- superview屬性:當(dāng)前視圖的父視圖

- subviews屬性:視圖的直接子視圖

- addSubview:方法:添加子視圖

- removeFromSuperview:方法:將視圖從父視圖中移除

- bringSubviewToFront:方法:將指定的子視圖移到層次的頂層

- sendSubviewToBack:方法:將指定的子視圖放回到層次的底層

- insertSubview:atIndex:方法:在指定的層次位置插入子視圖

- insertSubview:aboveSubview:方法:在指定的視圖層上面添加子視圖

- insertSubview:belowSubview:方法:在指定的視圖層下面添加子視圖

- exchangeSubviewAtIndex:withSubviewAtIndex:方法:交換兩個(gè)子視圖的層次

- isDescendantOfView:方法:判斷一個(gè)視圖是不是另一個(gè)視圖的子視圖

配置視圖大小改變時(shí)行為的屬性和方法:

- autoresizingMask屬性:當(dāng)父視圖改變大小時(shí)子視圖如何改變

- autoresizesSubviews屬性:是否自動(dòng)調(diào)整子視圖大小

- contentMode屬性:視圖大小改變時(shí)如何呈現(xiàn)其內(nèi)容

- sizeToFit方法:調(diào)整視圖大小以適應(yīng)其子視圖

>**說明:**當(dāng)父視圖的尺寸發(fā)生變化時(shí),子視圖應(yīng)該發(fā)生怎樣的變化可以通過子視圖在父視圖中的??磕J絹磉M(jìn)行設(shè)置,對(duì)應(yīng)的屬性叫做autoresizingMask,它可能的取值包括 UIViewAutoresizingNone、UIViewAutoresizingFlexibleLeftMargin、UIViewAutoresizingFlexibleWidth、UIViewAutoresizingFlexibleRightMargin、UIViewAutoresizingFlexibleTopMargin、UIViewAutoresizingFlexibleHeight、UIViewAutoresizingFlexibleBottomMargin。如果希望同時(shí)滿足多個(gè)值可以通過按位或運(yùn)算來實(shí)現(xiàn)。

#UILabel的常用屬性

- text屬性:標(biāo)簽上的文字

- textColor屬性:文字的顏色

- textAlignment屬性:文字的對(duì)齊方式

- font屬性:字體

- lineBreakMode屬性:指定如何換行及截?cái)鄻?biāo)簽上的文字

- enabled屬性:是否允許繪制標(biāo)簽上的文字

和文字大小相關(guān)的屬性:

- adjustsFontSizeToFitWidth屬性:調(diào)整文字大小適應(yīng)標(biāo)簽寬度

- adjustsLetterSpacingToFitWidth屬性:調(diào)整字符間距來適應(yīng)文字寬度

- numberOfLines屬性:顯示的行數(shù),設(shè)置成0表示不限制行數(shù)

- minimumScaleFactor屬性:最小的伸縮因子

- minimumFontSize屬性:最小字體大小

和陰影效果相關(guān)的屬性:

- shadowColor屬性:陰影顏色

- shadowOffset屬性:陰影偏移量

#創(chuàng)建和使用UIButton對(duì)象

**buttonWithType**:類方法,在創(chuàng)建按鈕時(shí)指定按鈕的類型。(iOS 7開始取消了圓角矩形按鈕類型,但是仍然可以通過其他方式做出圓角矩形的按鈕,因?yàn)楹芏鄷r(shí)候按鈕都是以圖片的形態(tài)呈現(xiàn),有了這個(gè)圓角矩形反而不方便定制)

###UIButton常用屬性和方法###

配置按鈕標(biāo)題的屬性和方法:

- titleLabel屬性:按鈕標(biāo)題的標(biāo)簽

- titleForState:方法:指定狀態(tài)下的按鈕標(biāo)題

- setTitle:forState:方法:設(shè)置指定狀態(tài)下按鈕的標(biāo)題

- titleColorForState:方法:指定狀態(tài)下的按鈕標(biāo)題顏色

- setTitleColor:forState:方法:設(shè)置指定狀態(tài)下按鈕標(biāo)題的顏色

- setTitleShadowColor:forState:方法:設(shè)置指定狀態(tài)下按鈕標(biāo)題陰影的顏色

配置按鈕顯示的方法:

- backgroundImageForState:方法:獲得指定狀態(tài)下的背景圖

- setBackgroundImage:forState:方法:設(shè)置指定狀態(tài)下的背景圖

- imageForState:方法:獲得指定狀態(tài)下的按鈕圖片

- setImage:forState:方法:設(shè)置指定狀態(tài)下的按鈕圖片

配置邊距的屬性:

- contentEdgeInsets屬性:內(nèi)容的邊距

- titleEdgeInsets屬性:標(biāo)題的邊距

- imageEdgeInsets屬性:圖片的邊距

獲取按鈕當(dāng)前狀態(tài)的屬性:

- buttonType屬性:可能的取值包括UIButtonTypeCustom、UIButtonTypeSystem、UIButtonTypeDetailDisclosure、UIButtonTypeInfoLight、UIButtonTypeInfoDark、UIButtonTypeContactAdd、UIButtonTypeRounedRect(過時(shí))。

- currentTitle屬性:按鈕上當(dāng)前顯示的標(biāo)題

- currentTitleColor屬性:當(dāng)前標(biāo)題顏色

- currentImage屬性:按鈕上當(dāng)前顯示的圖片

- currentBackgroundImage屬性:按鈕上當(dāng)前顯示的背景圖片

- imageView屬性:按鈕上的圖片視圖

繼承自UIControl的屬性和方法:

- addTarget:action:forControlEvents:方法:將為事件添加的消息接受者和對(duì)應(yīng)的動(dòng)作加入事件派發(fā)表,簡而言之就是為控件綁定事件處理的回調(diào)方法

- removeTarget:action:forControlEvents:方法:與上面方法的作用相反

- enabled屬性:控件是啟動(dòng)還是禁用

- state屬性:控件所處的狀態(tài)

##UIButton的常用事件和狀態(tài)

我們先說一下UIControl的所有可能的事件。

事件類型|說明

:--|:--

UIControlEventTouchDown|單點(diǎn)觸摸按下事件,用戶點(diǎn)觸屏幕,或者又有新手指落下的時(shí)候

UIControlEventTouchDownRepeat|多點(diǎn)觸摸按下事件,點(diǎn)觸計(jì)數(shù)大于1:用戶按下第二、三、或第四根手指的時(shí)候

UIControlEventTouchDragInside|當(dāng)一次觸摸在控件窗口內(nèi)拖動(dòng)時(shí)

UIControlEventTouchDragOutside|當(dāng)一次觸摸在控件窗口之外拖動(dòng)時(shí)

UIControlEventTouchDragEnter|當(dāng)一次觸摸從控件窗口之外拖動(dòng)到內(nèi)部時(shí)

UIControlEventTouchDragExit|當(dāng)一次觸摸從控件窗口內(nèi)部拖動(dòng)到外部時(shí)

UIControlEventTouchUpInside|所有在控件之內(nèi)觸摸抬起事件

UIControlEventTouchUpOutside|所有在控件之外觸摸抬起事件(點(diǎn)觸必須開始與控件內(nèi)部才會(huì)發(fā)送通知)

UIControlEventTouchCancel|所有觸摸取消事件,即一次觸摸因?yàn)榉派狭颂嗍种付蝗∠?,或者被上鎖或者電話呼叫打斷

UIControlEventValueChanged|當(dāng)控件的值發(fā)生改變時(shí),發(fā)送通知。用于滑塊、分段控件、以及其他取值的控件。你可以配置滑塊控件何時(shí)發(fā)送通知,在滑塊被放下時(shí)發(fā)送,或者在被拖動(dòng)時(shí)發(fā)送

UIControlEventEditingDidBegin|當(dāng)文本控件中開始編輯時(shí)發(fā)送通知

UIControlEventEditingChanged|當(dāng)文本控件中的文本被改變時(shí)發(fā)送通知

UIControlEventEditingDidEnd|當(dāng)文本控件中編輯結(jié)束時(shí)發(fā)送通知

UIControlEventEditingDidOnExit|當(dāng)文本控件內(nèi)通過按下回車鍵(或等價(jià)行為)結(jié)束編輯時(shí),發(fā)送通知

UIControlEventAlltouchEvents|通知所有觸摸事件

UIControlEventAllEditingEvents|通知所有關(guān)于文本編輯的事件

UIControlEventAllEvents|通知所有事件

對(duì)于UIButton來說,可能絕大多數(shù)處理的都是UIControlEventTouchUpInside事件,簡單的說就是按鈕點(diǎn)擊的事件。

#UIImage對(duì)象的屬性

- **size**屬性:圖像的大小,得到一個(gè)CGSize結(jié)構(gòu)體,其中包括了寬度(width)和高度(height)。

###繪制圖像###

- **drawAtPoint:**方法:從指定的左上角坐標(biāo)處繪制圖像。

- **drawInRect:**方法:在指定的矩形區(qū)域內(nèi)繪制整個(gè)圖像。

##UIViewController入門##

###概念和作用###

UIViewController可以管理一屏的內(nèi)容,如果說UIWindow是一副畫的畫框,那么UIViewController就是畫框中植入的一張畫布。我們并不建議將所有的視圖對(duì)象或子視圖都直接置于UIWindow對(duì)象中,因?yàn)閁IWindow對(duì)象是唯一的,如果要想改變用戶界面就會(huì)非常的麻煩。如果使用UIViewController來管理用戶界面的話,在切換用戶界面時(shí)只需要更換一個(gè)視圖控制器就可以了。

它定義了一系列和生命周期相關(guān)的方法。下面的圖展示了UIViewController的生命周期,詳細(xì)的內(nèi)容我們?cè)诤罄m(xù)的課程中跟大家分享。

視圖控制器加載:

![](http://img.blog.csdn.net/20150704084850885)

視圖控制器收到內(nèi)存警告:

![](http://img.blog.csdn.net/20150704084904755)

###如何將UIViewController和UIWindow關(guān)聯(lián)###

我們可以創(chuàng)建一個(gè)視圖控制器并將第一個(gè)例子中在UIWindow上放置的按鈕和標(biāo)簽放到視圖控制器中,再通過UIWindow對(duì)象的rootViewController屬性將視圖控制器設(shè)置為窗體對(duì)象的根視圖控制器,代碼如下所示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,036評(píng)論 4 61
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,686評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你可以看...
    F麥子閱讀 5,258評(píng)論 5 13
  • var clientHeight = document.body.clientHeight; var _focu...
    lxt410725閱讀 231評(píng)論 0 1
  • 聊聊那些不完美的女孩 【片花】起伏人生,你依舊眉目如初;紙短情長,偏愛你一世斑駁。浮生未歇,剎那芳華,半世煙塵,閑...
    胡崽崽閱讀 585評(píng)論 2 11

友情鏈接更多精彩內(nèi)容