uiimageview
,顧名思義,是用來放置的。使用inte***ce builder
設計介面時,當然可以直接將控制項拖進去並設定相關屬性,這就不說了,這裡講的是用**。
1 、建立乙個uiimageview
:建立乙個uiimageview
物件有五種方法:
uiimageview *imageview1 = [[uiimageviewalloc] init];
uiimageview *imageview2 = [[uiimageviewalloc]initwithframe:(cgrect)];
uiimageview *imageview3 = [[uiimageviewalloc]initwithimage:(uiimage *)];
uiimageview *imageview4 = [[uiimageviewalloc]initwithimage:(uiimage *) highlightedimage:(uiimage *)];
uiimageview *imageview5 = [[uiimageviewalloc]initwithcoder:(nscoder *)];
比較常用的是前邊三個。至於第四個,當這個imageview
的highlighted
屬性是yes
時,顯示的就是引數highlightedimage
,一般情況下顯示的是第乙個引數uiimage 。2
、frame
與bounds
屬性:上述建立乙個uiimageview
的方法中,第二個方法是在建立時就設定位置和大小。
當之後想改變位置時,可以重新設定frame
屬性:imageview.frame = cgrectmake(cgfloat x,cgfloat y, cgfloat width,cgfloat heigth);
注意到uiimageview
還有乙個bounds
屬性imageview.bounds = cgrectmake(cgfloat x, cgfloaty, cgfloat width,cgfloat heigth);
那麼這個屬性跟frame
有什麼區別呢?
我的理解是,frame
設定其位置和大小,而bounds
只能設定其大小,其引數中的x
、y 不起作用即便是之前沒有設定frame
屬性,控制項最終的位置也不是bounds
所設定的引數。bounds
實現的是將uiimageview
控制項以原來的中心為中心進行縮放。例如有如下**:
imageview.frame = cgrectmake(0, 0, 320,460);
imageview.bounds = cgrectmake(100, 100,160, 230);
執行之後,這個imageview
的位置和大小是(80
, 115
, 160
, 230
)。3、contentmode
屬性:uiviewcontentmodescaleto
fill
uiviewcontentmodescaleas
pectfit
uiviewcontentmodescaleas
pectfill
uiviewcontentmoderedraw
uiviewcontentmodecenter
uiviewcontentmodetop
uiviewcontentmodebottom
uiviewcontentmodeleft
uiviewcontentmoderight
uiviewcontentmodetopleft
uiviewcontentmodetoprigh t
uiviewcontentmodebottoml
eftuiviewcontentmodebottomr
ight
注意以上幾個常量,凡是沒有帶scale
的,當尺寸超過 imageview
尺寸時,只有部分顯示在imageview
中。uiviewcontentmodescaleto
fill
屬性會導致變形。uiviewcontentmodescaleas
pectfit
會保證比例不變,而且全部顯示在imageview
中,這意味著imageview
會有部分空白。uiviewcontentmodescaleas
pectfill
也會證比例不變,但是是填充整個imageview
的,可能只有部分顯示出來。
前三個效果如下圖:
uiviewcontentmodescaleto
fill
uiviewcontentmodescaleas
pectfituiviewcontentmodescaleas
pectfill 4
、更改位置
更改乙個uiimageview
的位置,可以
4.1
直接修改其frame
屬性4.2
修改其center
屬性:imageview.center = cgpointmake(cgfloat x,cgfloat y);
center
屬性指的就是這個imageview
的中間點。
4.3
使用transform
屬性imageview.transform =cgaffinetransformmaketra
nslation(cgfloat dx,cgfloat dy);
其中dx
與dy表示想要往x
或者y方向移動多少,而不是移動到多少。
5 、旋轉影象
imageview.transform =cgaffinetransformmakerot
ation(cgfloatangle);
要注意它是按照順時針方向旋轉的,而且旋轉中心是原始imageview
的中心,也就是center
屬性表示的位置。
這個方法的引數angle
的單位是弧度,而不是我們最常用的度數,所以可以寫乙個巨集定義:
#define degreestoradians(x)(m_pi*(x)/180.0)
用於將度數轉化成弧度。下圖是旋轉45
度的情況:
6 、縮放影象
還是使用transform
屬性:imageview.transform =cgaffinetransformmakesca
le(cgfloat scale_w,cgfloat scale_h);
其中,cgfloatscale_w
與cgfloatscale_h
分別表示將原來的寬度和高度縮放到多少倍,下圖是縮放到原來的0.6
倍的示意圖:
7imageview.animationimages = imagesarray;
// imageview.animationduration = [imagesarraycount];
// 表示無數遍
imageview.animationrepeatcount = 0;
// [imageview startanimating];
其中,imagesarray
8imageview.userinteractionenabled = yes;
uitapgesturerecognizer *singletap =[[uitapgesturerecognizer alloc]initwithtarget:selfaction:@selector(tapimageview:)];
[imageview addgesturerecognizer:singletap];
一定要先將userinteractionenabled
置為yes
,這樣才能響應單擊事件。
9 、其他設定
imageview.hidden = yes
或者no;
//隱藏或者顯示
imageview.alpha = (cgfloat)al;
// 設定透明度
imageview.highlightedimage =(uiimage*)hightlightedimage; //
設定高亮時顯示的
imageview.image = (uiimage *)image; //
設定正常顯示的
[imageviewsizetofit];
//將尺寸調整為與內容相同
iPhone開發之UIImage應用與記憶體管理
用uiimage載入影象的方法很多,最常用的是下面兩種 1 用imagenamed函式 uiimage imagenamed imagename 2 用nsdata的方式載入,例如 1.nsstring filepath nsbundle mainbundle pathforresource fil...
iOS開發之UIImage等比縮放
前面講了擷取uiimage指定大小區域,很方便的擷取uiimage。今天要和大家分享的是uiimage的縮放。兩種縮放 縮放到指定大小,也就是指定的size.等比縮放。uiimage imagecompresswith uiimage image scaledtosize cgsize size u...
iOS開發之UIImage等比縮放
謝謝大家的支援和關愛。假設有做的不到的地方,還請海涵。畢竟我乙個人的力量是有限的。我會盡自己最大的努力大家準備一些乾貨。有些內容可能都是比較基礎的,記住 不積跬步無以至千里,不積小流無以成江海。worldligang 163.com前面講了擷取uiimage指定大小區域,非常方便的擷取uiimage...