通常來說 UIView 可以想成是一個容器,而 UIImage 則是這容器內的填充物,從字面上來看 UIImage 只是單純的影像,但是實際上它可能是由很多不同的物件所組成的影像,像是按鈕、圖片、文字或是動畫等等,下列程式碼將示範如何擷取 UIView 中的 UIImage 方法。
在開始前由於我們有使用到 QuartzCore 的類別,所以必須要先匯入其標頭檔與 Framework。
#import <QuartzCore/QuartzCore.h>
如果不知道如何新增 Framework 的讀者們,可以參考 Xcode 4 新增 Framework 的方法一文。
//自行定義的函式用來取得UIView中的UIImage
- (UIImage *)captureImageFromView:(UIView *)theView {
//設定邊界大小和影像透明度與比例
UIGraphicsBeginImageContextWithOptions(theView.bounds.size, theView.opaque, 0.0);
[theView.layer renderInContext:UIGraphicsGetCurrentContext()];
//取得影像
UIImage *captureImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return captureImage;
}
透過上述函式我們已經可以成功取得 UIView 中的 UIImage ,此函式在擷取 UIImage 的同時,也可以設定其相關的參數,像是透明度或是比例等,在使用上也非常方便,只要在 setImage: 這導入此函式即可,本範例就是使用此方式將擷取出來的影像再貼回畫面上,一直反覆執行。
//此示範為擷取整個螢幕畫面
[imageView setImage:[self captureImageFromView:self.view]];
若是想要擷取動畫(CABasicAnimation 或是 CoreGraphicAnimation)中的影像時,必須將上述自訂函式程式碼的第 6 行更改成以下程式碼,這樣所擷取到的畫面才會是動畫執行中的畫面,而不是第一或是最後的影格,另一方面在函式的輸入參數也必須是 UIView(不能是 UIImageView),所以在實做時可以考慮多用一層 UIView 把原本 UIImageView 給包起來。
[[theView.layer presentationLayer] renderInContext:UIGraphicsGetCurrentContext()];
沒有留言:
張貼留言