天天看點

瘋狂ios講義瘋狂連載之顯示動畫

UIImage專門用于顯示各種位圖該類支援表12.1所示的各種圖檔格式。

瘋狂ios講義瘋狂連載之顯示動畫

當系統記憶體緊張時UIImage會将圖檔資料從UIImage對象中清理出去來以節省系統記憶體這裡的清理行為隻是清理UIImage内部存儲的圖檔資料并不清理UIImage對象本身。當程式使用一個圖檔資料被清理過的UIImage對象時該UIImage将會自動從原始的圖檔檔案中加載圖檔資料。

盡量避免使用UIImage加載過大如大于1024像素×1024像素的圖檔如果程式實在需要加載這種大圖檔可以考慮将該圖檔分解成多張小圖檔進行加載。

如果用UIImage來顯示靜止的圖檔UIImage提供了如下常用的類方法。

+ p_w_picpathNamed:該方法用于加載指定檔案名對應的圖檔。該方法有緩存機制如果該方法試圖加載的檔案不存在它才會去加載圖檔檔案并緩存它如果系統已經緩存過指定的圖檔該方法将直接使用已緩存的圖檔。

當程式需要頻繁地加載、解除安裝圖檔檔案時不應該使用該方法來加載圖檔。

+ p_w_picpathWithContentsOfFile:該方法用于加載指定檔案名對應的圖檔。

+ p_w_picpathWithData:該方法用于根據NSData中封裝的圖檔資料來建立圖檔。

+ p_w_picpathWithData:scale:該方法用于根據NSData中封裝的圖檔資料來建立圖檔并按指定的縮放因子對圖檔進行縮放。

+ p_w_picpathWithCGImage:該方法用于根據指定的CGImageRef對象來建立UIImage。

+ p_w_picpathWithCGImage:scale:orientation:該方法用于根據指定的CGImageRef對象來建立UIImage并将圖檔縮放到指定比例。該方法的最後一個參數指定對圖檔執行旋轉、鏡像等變換操作。

上面這些方法涉及一個CGImageRef這是處理位圖的另一個API本節稍後會詳細介紹。

通過上面介紹的這些方法UIImage可以加載不同資料源的圖檔包括加載應用程式資源包的圖檔、加載網絡圖檔和手機本地圖檔。下面對UIImage需要讀取的圖檔進行簡單分類。

如果程式需要從應用資源包讀取圖檔可借助UIImage的p_w_picpathNamed:方法進行讀取例如如下代碼

UIImage* p_w_picpath=[UIImage p_w_picpathNamed:@"fkjava.png"];

如果需要從網絡讀取圖檔可借助NSData的方法來加載指定URL對應的網絡資料然後利用UImage的p_w_picpathWithData:方法來加載圖檔即可。例如如下代碼

NSURL* url = [NSURL URLWithString:@"http://www.crazyit.org/logo.jpg"];

NSData* data = [NSData dataWithContentsOfURL:url]

UIImage* p_w_picpath = [UIImage p_w_picpathWithData:data];

如果需要讀取手機本地的圖檔隻要先擷取圖檔路徑再利用UIImage的p_w_picpathWithContentsOfFile:方法加載圖檔即可。例如如下代碼

NSString *path = [[NSHomeDirectory()

stringByAppendingPathComponent:@"Documents"]

stringByAppendingPathComponent:@"fkjava.png"];

UIImage *p_w_picpath = [UIImage p_w_picpathWithContentsOfFile:path];

除此之外UIImage還可以加載多張圖檔并按指定時間間隔依次顯示多張圖檔這就可以非常友善地實作動畫效果。UImage提供了如下方法來加載多張圖檔實作動畫。

+ animatedImageNamed:duration:根據指定的圖檔名來加載系列圖檔。例如調用該方法時的第一個參數名為butterfly該方法将會自動加載butterfly0.png、butterfly1.png、butterfly2.png等圖檔。

+ animatedImageWithImages:duration:該方法需要傳入一個NSArray作為多張動畫圖檔。該NSArray中的每個元素都是UIImage對象。

執行個體蝴蝶飛舞

下面的執行個體使用UIImage加載多張圖檔來顯示蝴蝶揮舞翅膀的動畫再用一個UIImageView控件來顯示該圖檔接下來使用定時器不斷地改變UIImageView位置即可完成該執行個體。

建立一個Single View Application本執行個體直接使用代碼來建立UIImageView、UIImage是以不需要修界面設計檔案。下面是該執行個體控制器類的實作部分的代碼。

程式清單codes/12/12.1/ImageTest/ImageTest/FKViewController.m

瘋狂ios講義瘋狂連載之顯示動畫

上面程式中的粗體字代碼使用UImage加載多張圖檔并控制以動畫形式播放多張圖檔接下來建立了一個NSTimer定時器該定時器控制周期性地改變UIImageView的位置這樣即可實作本例的動畫。

編譯、運作該程式即可看到如圖12.1所示的效果。

瘋狂ios講義瘋狂連載之顯示動畫

圖12.1 蝴蝶飛舞執行個體

————本文節選自《瘋狂ios講義上》

瘋狂ios講義瘋狂連載之顯示動畫

繼續閱讀