![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqdo-DNrZY2tbV_-k7NvwdXckaq-kuR4UXxXVNkuaDcY978rzEL526j2BTvE0epby3ib3vTnik1iY_O04ITUBjf4shI3EW9AwqIpHN8FWMVyKPQy5-LNPY6LBE3gzbUrBI1wDvevpllcQS/s320/IMG_0641.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPHlF4x66S8g3lUZ8BJjWb3Uy10R29KpIIttlwuGFOls-9SDbSKPDgCudr0p-e1pegjgpZW6xz6Akyy7AfrlCt_6d2pz_lpHjy-xyomGBCF0EFkQb-3TC1iddzEBXYM-9SfGDQ45A1ACzC/s320/IMG_0646.png)
在 UIImageView 包含著許多變形的功能,如果不對 Anchor Point 加以設定,通常都會以影像的正中心為主來進行變形的動作。Anchor Point 稱作「錨點」或是「定位點」,正常的情況下 Anchor Point 會位在影像的正中心,就如上圖這樣,我們將影像做放大的變形,它會以中為準,像四面八方做等比例的放大,下列程式碼將示範以放大影像為例,如何設定Anchor Point 在不同的位置與 Anchor Point 對影像所造成的影響。
Anchor Point 這個 Method 是包含在 UIImageView.Layer 中,而它是被定義在 QuartzCore 裡,所以在使用 Anchor Point 時,我們必須先加入正確的 Framework 與標頭檔。
#import <QuartzCore/QuartzCore.h>
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM__Ow30P6irk7V0QCn1Ja2imf4-f0o3FNmtgfbZpxstYsr2iMKhh8Q8q60NOKOF7Lar96ww_6qlCJv1RIo2TWDEgtrKjwO0PTV4wou1gf2Buh-YhUi7z04YkOSEn9fF5hEXEh9VLuNeP-/s400/Screen+shot+2011-03-24+at+10.06.png)
加入 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];
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4TJquKU0akr2v-jJf-Vjgo_IuZxrcvab4-wRzDVu71_Kh4P4-P5n1dCP4KdltBbipjvAcDlYZga8Xytbzp-Pzu6AmuyCC5BQhv9P6ifp4E2JdZXzMLjvcqJ6xjtf5cMf84dPHNQikNhs7/s320/IMG_0643.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEaSAFa1aa1akBXE4U8YJq4kabJtoEWf5gSHnpkHvmosu5GCS9iSLoaOY7HmAtXhICDYLIGUlQzhYUYUOLZHOWx2Mfi-d7CvBTsdoSdjzSKByi2VkARbYPGWNNWTDnWmfM6N-wchtoUn35/s320/IMG_0642.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-fHpFAnGbJxeXZTwnGotm7OW32usmoNpItBm2xoGAWJfs6ZAtQpPtr1neZ1amP4Upnq53buluwbRZrlbYOXZ3zNiu7XwJS3DJK2FwJBQjaas2-kZsgMuRpxEHCi4TdYRj96Aui_FMPaBp/s1600/IMG_0644.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfrKomJBRF_xmEZ7zcl56upe0T3qmFXijmPq0hrTD2AHX-kW6pETKHFDgihcRDKXb6hw0tVGT0hDw7CMj0VenYCjQhkmuGWioBTbBEmcH8PDmjoGHUYgcUDA9cJxIlt4if8ttJsSwxAADH/s320/IMG_0645.png)
沒有留言:
張貼留言