在 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];
沒有留言:
張貼留言