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.24.2011

AnchorPoint 概述

 

在 UIImageView 包含著許多變形的功能,如果不對 Anchor Point 加以設定,通常都會以影像的正中心為主來進行變形的動作。Anchor Point 稱作「錨點」或是「定位點」,正常的情況下 Anchor Point 會位在影像的正中心,就如上圖這樣,我們將影像做放大的變形,它會以中為準,像四面八方做等比例的放大,下列程式碼將示範以放大影像為例,如何設定Anchor Point 在不同的位置與 Anchor Point 對影像所造成的影響。

Anchor Point 這個 Method 是包含在 UIImageView.Layer 中,而它是被定義在 QuartzCore 裡,所以在使用 Anchor Point 時,我們必須先加入正確的 Framework 與標頭檔。

#import <QuartzCore/QuartzCore.h>

加入 QuartzCore.Framework 的方法這裡就不贅述,大家可以參考之前的文章或是直接在站內搜尋「Framework」即可。

接下來就是設定 Anchor Point 的方法,其程式碼如下。

imageView.layer.anchorPoint = CGPointMake(0.5,0.5);
Anchor Point 的範圍是在 0 ~ 1 之間, 在這個範圍內 Anchor Point 皆會設定在影像之內,如果 X 與 Y 座標皆設定成 0.5,就是代表中心點 Center 的位置,也就是 Default 值。若是為了其他應用想要把 Anchor Point 設定在影像之外,讓影像有類似「公轉」的效果,除了使用三角函數的餘弦定理,也可以直接將 Anchor Point 設定成小於 0 或是大於 的數值,不過在這裡必須自己做更精確的換算才行,因為 Anchor Point 設定值不是並不是真正座標,而是影像的比例。

下列我們準備了一個放大影像的程式碼片段,並套用不同的 Anchor Point 設定(左上、左下、右上與右下),在下圖中可以看出不同的放大方式。

imageView.transform = CGAffineTransformMakeScale(1.0, 1.0);

[UIView beginAnimations:@"animations" context:nil];
[UIView setAnimationDuration:3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop)];

imageView.transform = CGAffineTransformMakeScale(2.0, 2.0);

[UIView commitAnimations];

 

 






沒有留言:

張貼留言