sweet筆記_UIView的transform屬性

iOS開發(fā)UIView的transform屬性詳解

本文主要是詳解iOS開發(fā)UIView的transform屬性,更多IOS技術(shù)知識(shí)邑闲,請登陸瘋狂軟件教育官網(wǎng)。加微信號(hào)瘋狂軟件,或者用微信搜索瘋狂軟件性芬,參加2015年優(yōu)惠活動(dòng)居兆,有機(jī)會(huì)獲得優(yōu)惠劵和代金劵。UIView的transform屬性

CGAffineTransform實(shí)際上是一個(gè)矩陣

| a,? b,? 0 |

| c,? d,? 0 |

| tx, ty, 1 |

a={1,1} b={1,2} c={2,1} d={2,2} tx={3,1} ty={3,2}

這個(gè)矩陣是用來標(biāo)記這個(gè)View的變化感混,可以是旋轉(zhuǎn)端幼,縮放,平移弧满。

也就是說婆跑,View的坐標(biāo)為 {x,y},變化后的坐標(biāo)是{x',y'}

.

| a,? b,0|

{x',y',1}={x,y,1} x | c,? d,0|

| tx, ty,1|

http://developer.apple.com/library/io...這個(gè)是官方文檔庭呜,里邊有諸多方法可以方便的創(chuàng)建這個(gè)矩陣

transform是view的一個(gè)重要屬性,它在矩陣層面上改變view的顯狀態(tài),能實(shí)現(xiàn)view的縮放滑进、旋轉(zhuǎn)、平移等功能募谎。transform是CGAffineTransform類型的扶关。使用transform后view的frame被真實(shí)改變的。

struct CGAffineTransform {

CGFloat a, b, c, d;

CGFloat tx, ty;

};

transform詳解

在view可以看做有很多像素塊構(gòu)成数冬,可以用(x,y)代表一個(gè)像素塊节槐,x為寬,y為高。transform就是改變每個(gè)像素塊的形狀铜异。在運(yùn)算過程中哥倔,[x,y,1]表示原來的像素塊,而新的像素塊[xn,yn,1]是由[x,y,1]乘以矩陣

{

a, b, 0

c, d, 0

tx,ty,1

}生成的揍庄∨剌铮化簡矩陣相乘,公式為

xn=ax+cy+tx;

yn=bx+dy+ty;

這個(gè)矩陣的第三列是固定的币绩,所以每次變換時(shí)蜡秽,只需傳入前兩列的六個(gè)參數(shù)[a,b,c,d,tx,ty]即可。

在CGAffineTransform的生成函數(shù)中缆镣,大多是兩兩對(duì)應(yīng)的芽突,一個(gè)帶make字樣,一個(gè)沒有董瞻。帶make字樣的是直接生成一個(gè)新的CGAffineTransform寞蚌,沒有make字樣的則是在一個(gè)CGAffineTransform的基礎(chǔ)上生成新的。

函數(shù)返回值均是CGAffineTransform類型钠糊。

//實(shí)現(xiàn)的是放大和縮小挟秤,在原來transform的基礎(chǔ)上生成一個(gè)新的transform。生成新的transform相當(dāng)于將t' = [sx抄伍,0艘刚,0,sy截珍,0攀甚,0]這六個(gè)參數(shù)代入矩陣中。則矩陣為[

sx,0 ,0

0 ,sy,0

0 ,0 ,1

];代入公式中岗喉,xn=(sx)*x,yn=(sy)*y秋度。所以sx,sy分別代表x軸與y軸上的放大倍數(shù)。

CGAffineTransformScale(CGAffineTransform t,

CGFloat sx, CGFloat sy);

CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

//實(shí)現(xiàn)的是旋轉(zhuǎn)钱床。angle為角度荚斯,angle=π則旋轉(zhuǎn)180度。矩陣的六個(gè)參數(shù)為t' = [ cos(angle)查牌,sin(angle)事期,-sin(angle),cos(angle) 0纸颜,0];

CGAffineTransformRotate(CGAffineTransform t,

CGFloat angle)

CGAffineTransformMakeRotation(CGFloat angle);

//實(shí)現(xiàn)的是平移刑赶,矩陣的六個(gè)參數(shù)為t' = [1,0懂衩,0,1,tx浊洞,ty] ;代入公式牵敷,xn=x+tx,yn=y+ty。

CGAffineTransformTranslate(CGAffineTransform t,

CGFloat tx, CGFloat ty);

CGAffineTransformMakeTranslation(CGFloat tx,

CGFloat ty);

[objc]view plaincopy

1//旋轉(zhuǎn)

2-?(IBAction)rotationButtonPressed:(id)sender

3{

4self.imageView.transform?=?CGAffineTransformRotate(self.imageView.transform,?M_PI_4);

5}

6//縮放

7-?(IBAction)scaleButtonPressed:(id)sender

8{

9self.imageView.transform?=?CGAffineTransformScale(self.imageView.transform,?0.9,?0.9);

10}

11

12-?(IBAction)moveButtonPressed:(id)sender

13{

14_imageView.transform?=?CGAffineTransformTranslate(self.imageView.transform,?0,?10);

15}

?獲得CGAffineTransform有多種方法法希,例如使用CGAffineTransformMake枷餐,但是對(duì)于矩陣操作相對(duì)比較麻煩,事實(shí)上iOS已經(jīng)為我們準(zhǔn)備好了三個(gè)方法:CGAffineTransformMakeRotation(旋轉(zhuǎn))苫亦、CGAffineTransformMakeScale(縮放)毛肋、CGAffineTransformMakeTranslation(移動(dòng));

? transform進(jìn)行旋轉(zhuǎn)屋剑、縮放润匙、移動(dòng)的時(shí)候不是在原來的基礎(chǔ)上增量形變的,因此如果需要持續(xù)在原來的基礎(chǔ)上旋轉(zhuǎn)唉匾、縮放孕讳、移動(dòng)那么每次需要在原來的基礎(chǔ)上增加或減少。當(dāng)然巍膘,我們可以定義一個(gè)全局變量進(jìn)行累加厂财,但是事實(shí)上iOS已經(jīng)為我們提供好了三個(gè)對(duì)應(yīng)的方法,分別用于在原來的角度峡懈、縮放璃饱、移動(dòng)位置的基礎(chǔ)上做出修改:CGAffineTransformRotate、CGAffineTransformScale肪康、CGAffineTransformTranslate荚恶;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市梅鹦,隨后出現(xiàn)的幾起案子裆甩,更是在濱河造成了極大的恐慌,老刑警劉巖齐唆,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗤栓,死亡現(xiàn)場離奇詭異,居然都是意外死亡箍邮,警方通過查閱死者的電腦和手機(jī)茉帅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锭弊,“玉大人堪澎,你說我怎么就攤上這事∥吨停” “怎么了樱蛤?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵钮呀,是天一觀的道長。 經(jīng)常有香客問我昨凡,道長爽醋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任便脊,我火速辦了婚禮蚂四,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哪痰。我一直安慰自己遂赠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布晌杰。 她就那樣靜靜地躺著跷睦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乎莉。 梳的紋絲不亂的頭發(fā)上送讲,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音惋啃,去河邊找鬼哼鬓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛边灭,可吹牛的內(nèi)容都是我干的异希。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绒瘦,長吁一口氣:“原來是場噩夢啊……” “哼称簿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惰帽,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤憨降,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后该酗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體授药,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年呜魄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悔叽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爵嗅,死狀恐怖娇澎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睹晒,我是刑警寧澤趟庄,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布括细,位于F島的核電站,受9級(jí)特大地震影響戚啥,放射性物質(zhì)發(fā)生泄漏勒极。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一虑鼎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧键痛,春花似錦炫彩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丁频,卻和暖如春杉允,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背席里。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國打工叔磷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奖磁。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓改基,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咖为。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秕狰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容