en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

3.09.2011

使用 CALayer 展示大小不同的影像


通常要展示圖片,一般都會用到 UIImageView,若是要縮放功能可以將 UIImageView 放入 UIScrollView 裡面,但是如果要展示一張超過 iOS 裝置顯示範圍的圖片,而你想要以特定大小在 iOS 裝置顯示全圖時,該如何執行? 用 CALayer 。

在開始前由於我們有使用到 QuartzCore 的類別,所以必須要先匯入其標頭檔與 Framework。
#import <QuartzCore/QuartzCore.h>


如果不知道如何新增 Framework 的讀者們,可以參考 Xcode 4 新增 Framework 的方法一文。

我們以一張大小為1024 x 680 的圖片為例,將他放入不同大小的 CALayer,然後展示出來,我們設定三個 CALayer,每一個 CALayer 的大小都不同,並且不超過 iPhone 視窗大小。我們在 ViewController 的 viewDidLoad 中置入下列程式碼。

//宣告image物件
UIImage *aImage = [UIImage imageNamed:@"myPhoto.jpg"];

//使用"layer" class method建立CALayer物件
CALayer *layer1 = [CALayer layer];

//設定CALayer的frame大小
layer1.frame = CGRectMake(110, 20, 100, 66);

//設定CALayer的內容為image物件
layer1.contents = (id)aImage.CGImage;

//將CALayer置入view
[self.view.layer addSublayer:layer1];

//以下用同樣方式設定大小不同的CALayer
CALayer *layer2 = [CALayer layer];
layer2.frame = CGRectMake(85, 106, 150, 100);
layer2.contents = (id)aImage.CGImage;
[self.view.layer addSublayer:layer2];

CALayer *layer3 = [CALayer layer];
layer3.frame = CGRectMake(0, 226, 320, 213);
layer3.contents = (id)aImage.CGImage;
[self.view.layer addSublayer:layer3];

使用以上的程式碼,我們將超出 iPhone 顯示範圍的圖片,以三種大小不同的影像展示出來。要注意的是設定 CALayer 的 contents 時,是將 UIImage 轉換為 CGImageRef type,再回傳給 contents 。





沒有留言:

張貼留言