UIImageView表明一個圖片顯示控件,它直接繼承了UIView基類,沒有繼承UIControl,所以,UIImage只能做爲圖片的顯示控件,不能接受用戶輸入,也不能與用戶交互,它只是一個靜態控件。ios
當程序須要使用UIImageView來顯示圖片時,便可直接在Interface Builder中把UIImageView拖入程序界面中,也可在程序中建立UIImageView對象。數組
建立UIImageView對象以後,接下來能夠經過以下兩個屬性訪問或設置該控件顯示的圖片。瀏覽器
p_w_picpath:訪問或設置該控件顯示的圖片。ide
highlightedImage:訪問或設置該控件處於高亮狀態時顯示的圖片。動畫
除此以外,UIImageView還可使用動畫顯示一組圖片,使用UIImageView動畫顯示一組圖片的屬性和方法以下。ui
animationImages:訪問或者設置該UIImageView須要動畫顯示的多張圖片。該屬性的值是一個NSArray對象。spa
highlightedAnimationImages:訪問或者設置該UIImageView高亮狀態下須要動畫顯示的多張圖片。該屬性的值是一個NSArray對象。設計
animationDuration:訪問或設置該UIImageView的動畫持續時間。code
animationRepeatCount:訪問或設置該UIImageView的動畫重複次數。對象
startAnimating:開始播放動畫。
stopAnimating:中止播放動畫。
isAnimating:該方法判斷該UIImageView是否正在播放動畫。
若是在Interface Builder的用戶界面設計文件中選中一個UIImageView,能夠看到Xcode顯示如圖10.24所示的屬性檢查器面板。
在圖10.24所示的屬性檢查面板中,UIImageView所支持的三個屬性的意義很是明確,此處再也不贅述。實際上,UIView控件所支持的Mode屬性可控制UIImageView所顯示圖片的縮放模式,Mode屬性是一個列表框,該列表框支持以下列表項。
Scale To Fill:不保持縱橫比縮放圖片,使圖片徹底適應該UIImageView控件。
Aspect Fit:保持縱橫比縮放圖片,使圖片的長邊能徹底顯示出來。也就是說,能夠完整地將圖片顯示出來。
Aspect Fill:保持縱橫比縮放圖片,只保證圖片的短邊能徹底顯示出來。也就是說,圖片一般只在水平或垂直方向是完整的,另外一個方向將會發生截取。
Center:不縮放圖片,只顯示圖片的中間區域。
Top:不縮放圖片,只顯示圖片的頂部區域。
Bottom:不縮放圖片,只顯示圖片的底部區域。
Left:不縮放圖片,只顯示圖片的左邊區域。
Right:不縮放圖片,只顯示圖片的右邊區域。
Top Left:不縮放圖片,只顯示圖片的左上邊區域。
Top Right:不縮放圖片,只顯示圖片的右上邊區域。
Bottom Left:不縮放圖片,只顯示圖片的左下邊區域。
Bottom Right:不縮放圖片,只顯示圖片的右下邊區域。
利用本實例的圖片瀏覽器能夠依次查看應用中的每張圖片,除此以外,還能夠改變正在查看的圖片的透明度,這可藉助UIView的alpha屬性來實現。不只如此,本圖片瀏覽器還可經過一個小區域來查看圖片的原始大小,所以,本例會定義兩個UIImageView:一個用於查看圖片總體,一個用於查看圖片局部的細節。
建立一個Single View Application,並向界面中添加三個按鈕、兩個UIImageView,而後將它們擺放整齊,在Interface Builder中設計出的程序界面如圖10.25所示。
爲了能在程序中訪問兩個UIImageView控件,還須要在Interface Builder中將這兩個UIImageView綁定到控制器類的IBOutlet屬性:iv1和iv2,這樣控制器類便可經過這兩個屬性來訪問這兩個UIImageView控件。
爲了讓程序能響應應用界面上的三個按鈕的單擊事件,還須要在Interface Builder中爲這三個按鈕的Touch Up Inside事件綁定IBAction事件處理方法,這些按鈕分別綁定到IBAction事件處理方法爲:plus:、minus:和next:。
完成界面設計以後,接下來編寫該應用界面對應的控制器類的實現部分,主要就是爲plus:、minus:和next:方法提供實現。
除此以外,程序還須要爲UIImageView的單擊事件提供響應——問題是UIImageView並未繼承UIControl基類,所以,既不能在Interface Builder中爲UIImageView的Touch Up Inside事件綁定IBAction事件處理方法,也不能經過代碼爲該控件的Touch Up Inside事件綁定事件處理方法。爲了讓UIImageView能響應單擊事件,程序能夠經過UIImageView添加手勢檢測器來處理單擊事件。
下面是控制器類的實現部分代碼。
程序清單:codes/10/10.7/UIImageViewTest/UIImageViewTest/FKViewController.m
上面程序中,在viewDidLoad方法中初始化了該程序須要顯示的全部圖片——將這些圖片的文件名組成一個NSArray數組。除此以外,該程序還建立一個手勢檢測器,併爲iv(第一個UIImageView控件)添加該手勢檢測器,該手勢檢測器就會負責處理該UIImageView控件上的點擊事件。
接下來在plus:、minus:中的粗體字代碼經過修改alpha屬性來控制該控件的透明度,而next:方法中粗體字代碼則經過p_w_picpath屬性來控制該UIImageView所顯示的圖片。
該程序中的一個難點是使用CGImage來處理位圖,雖然iOS提供了UIImage來表明位圖,但實際上UIImage對位圖的處理功能很是有限,若是須要對位圖進行處理,則須要藉助CGImage。第11章介紹圖形、圖像處理時會進一步介紹CGImage的功能和用法。
編譯、運行該程序,能夠看到如圖10.26所示的效果。
UIImageView除了能夠顯示單張圖片以外,還能以動畫方式輪換顯示多張圖片,這種顯示方式很是相似於幻燈片播放方式。
爲了讓UIImageView以動畫方式顯示多張圖片,只要爲該UIImageView的animationImages屬性賦一個NSArray集合(該集合元素中都是UIImage對象),接下來設置與動畫相關的一些屬性,再調用UIImageView的startAnimating方法開始播放動畫便可。
下面的實例將會使用UIImageView開發一個幻燈片播放器。
建立一個Single View Application,使用Interface Builder打開應用界面,並將一個UIImageView拖入該應用界面中。爲了能在該應用界面對應的控制器類中訪問該UIImageView控件,能夠在Interface Builder中將該UIImageView綁定到該控制器類的IBOutlet屬性:iv。
接下來修改該應用界面對應的控制器類的實現部分,修改後的實現部分代碼以下。
程序清單:codes/10/10.7/UIImageViewTest2/UIImageViewTest2/FKViewController.m
上面程序中,粗體字代碼就是設置UIImageView動畫播放圖片,並設置該控件的動畫持續時間和動畫重複次數,程序最後調用了UIImageView的startAnimating方法開始播放動畫,這樣便可讓UIImageView開始正常播放動畫。
————本文節選自《瘋狂ios講義(上)》