聲明 歡迎轉載,但是請尊重作者勞動成果,轉載請保留此框內聲明,謝謝。 文章出處:http://blog.csdn.net/iukey |
UIKit中有一些類可以用來操縱單個映像,還有一個映像類可以用來顯示映像。Apple還提供了一種特殊的導航控制器,用於從映像庫中選擇映像。
UIImage類對映像及其底層資料進行封裝。它可以直接繪製在一個視圖內,或者作為一個映像容器在另一個更大的映像視圖容器中使用。這個類類提供的方法可以用來從各種來源中載入映像,在螢幕上設定圖片的方向,以及提供有關映像的資訊。對於簡單的圖形應用,可以將UIImage對象用在視圖類的drawRect方法中,用來繪製映像和團模板。
你可以用檔案來初始化,也可以用url、未經處理資料、或者一個Core Graphics映像的內容。靜態方法(類方法)和執行個體方法都有;這些方法可以引用並緩衝已有的映像內容,也可以執行個體化新的映像對象,如何使用完全取決於應用程式的需要。
使用一個映像的最簡單方法就是通過靜態方法。靜態方法不會去管理映像的執行個體,與之相反,他們提供了直接的介面,可以用來共用位於架構內部的記憶體緩衝對象。這有助於保持應用程式的整潔,也會生去做清理工作的需要。靜態方法和執行個體方法都可以用來建立相同的對象。
一、使用檔案建立(靜態方法)
UIImage *myImage = [UIImage imageNamed:@"ppp"];
二、使用 URL 和未經處理資料(靜態方法)
NSData *imageData = [ NSData initWithBytes:image:imagePtr length:imageSize ]; // 假設 imagePtr 是一個指向未經處理資料的指標UIImage* myImage = [ [ UIImage alloc ]initWithData:imageData ];
UIImage *myImage2 =[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.kutx.cn/xiaotupian/icons/png/200803/20080327095245737.png"]]];
三、使用Core Graphics (靜態方法)
UIImage* myImage3 = [UIImage imageWithCGImage:myCGImageRef];
四、使用檔案(執行個體方法)
UIImage* myImage4 = [[UIImage alloc]initWithContentsOfFile:[NSString stringWithFormat:@"%@/Documents/ppp.png",NSHomeDirectory()]];
五、使用 URL 和未經處理資料(執行個體方法)
如果映像儲存在記憶體中,你可以建立一個NSData 對象作為initWithData 方法的原始輸入,來初始化一個UIImage對象。
如果映像是一張網狀圖片,可以使用NSData來進行預載,然後用它來初始化UIImage對象:
UIImage *myImage5 =[ [ UIImage alloc]initWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.kutx.cn/xiaotupian/icons/png/200803/20080327095245737.png"]] ];
六、使用Core Graphics (執行個體方法)
UIImage* myImage6 = [[UIImage alloc]initWithCGImage:myCGImageRef];
七、顯示映像
當視圖類的drawRect 方法被喚起時,它們會調用內部的回吐常式。與其他映像類不同,UIImage對象不能被當成子 ,直接附著在其他視圖上,因為他不是一個視圖類。反過來,一個UIView類則可以在視圖的drawRect常式中,調用映像的 drawRect 方法。這可以使得映像顯在UIView類的顯示地區內部。
只要一個視圖對象的視窗的某些部分需要繪製,就可以調用它的drawRect方法。要在視窗內 部顯示一個 UIImage 的內容,可以調用該對象的 drawRect 方法:
- (void)drawRect:(CGRect)rect{ CGRect myRect; myRect.origin.x = 0.0 ; myRect.origin.y = 0.0; myRect.size = myImage.size; [myImage drawInRect:myRect];}
注意不要在drawRect方法內分配任何新對象,因為他在每次視窗重繪時都被調用。
只有在視圖初次繪製時,才會調用drawRect方法。要強制更新,可以使用視圖類的 setNeedsDisplay 或者 setNeedsDisplayInRect 方法:
[myView setNeedsDisplay]; [myView setNeedsDisplayInRect:self.view];
八、繪製圖案
如果映像是一個圖案模板,你可以用UIImage類提供的另外一個方法 drawAsPatternInrect,在整個視圖地區重複繪製該映像:
UIView* myView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)]; [myImage drawInRect:myView.frame]; [self.view addSubview:myView];
九、方向
一個映像的方向,決定了它在螢幕上如何被旋轉。因為iPhone 能被以6種不同的方式握持,所以在方向改變時,能夠將映像做相應的旋轉就十分必要了。UIImage 有個唯讀屬性 imageOrientation 來標識它的方向。
UIImageOrientation myOrientation = myImage.imageOrientation ;
可以設定以下方向:
typedef enum { UIImageOrientationUp, // default orientation 預設方向 UIImageOrientationDown, // 180 deg rotation 旋轉180度 UIImageOrientationLeft, // 90 deg CCW 逆時針旋轉90度 UIImageOrientationRight, // 90 deg CW 順時針旋轉90度 UIImageOrientationUpMirrored, // as above but image mirrored along other axis. horizontal flip 向上水平翻轉 UIImageOrientationDownMirrored, // horizontal flip 向下水平翻轉 UIImageOrientationLeftMirrored, // vertical flip 逆時針旋轉90度,垂直翻轉 UIImageOrientationRightMirrored, // vertical flip 順時針旋轉90度,垂直翻轉} UIImageOrientation;
十、映像尺寸
你可以通過size屬性讀取一個映像的尺寸,得到一個CGSize 結構,其中包含 wifth 和height 。
CGSize myImageSize = myImage.size;