Transform總結(jié)

iOS中的transform有兩種康谆,一種是UIView的CGAffineTransform牵触,另一種是CaLayer的CATransform3D

CGAffineTransform
繪制2D圖形的一個(gè)仿射變換矩陣冠桃。一個(gè)仿射變換矩陣用于做旋轉(zhuǎn)茵肃、縮放蒂萎、平移

  • CGAffineTransform是UIView中的一個(gè)屬性
@property(nonatomic) CGAffineTransform transform;   // default is CGAffineTransformIdentity. animatable

typedef struct CGAffineTransform CGAffineTransform;

struct CGAffineTransform {
  CGFloat a, b, c, d;
  CGFloat tx, ty;
};
總結(jié)下transform的一些用法
  • 按照比例進(jìn)行縮放
CGAffineTransformMakeScale (CGFloat sx, CGFloat sy);
CGAffineTransformMakeScale(-1.0, 1.0);  //水平翻轉(zhuǎn)
CGAffineTransformMakeScale(1.0,-1.0);  //垂直翻轉(zhuǎn)
  • 按照一定弧度旋轉(zhuǎn)
CGAffineTransformMakeRotation ( CGFloat angle);
  • 平移的變化
CGAffineTransformMakeTranslation (CGFloat tx,CGFloat ty);
  • 修改CGAffineTransform同欠,在之前的變換基礎(chǔ)上做操作
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
CGAffineTransformInvert          //返回Transformation的反向
CGAffineTransformConcat          //合并兩個(gè)Transformation
  • 還原到進(jìn)行變換之前的狀態(tài)
CGAffineTransformIdentity
  • CGAffineTransformInvert 反向
CGAffineTransform CGAffineTransformInvert (CGAffineTransform t);

CATransform3D

CATransform3D 主要是針對(duì)CALayer的3D旋轉(zhuǎn)

struct CATransform3D
{
  CGFloat m11, m12, m13, m14;
  CGFloat m21, m22, m23, m24;
  CGFloat m31, m32, m33, m34;
  CGFloat m41, m42, m43, m44;
};

typedef struct CATransform3D CATransform3D;

CATransform3D中的一些API

//沒有變化,最初的樣子
/* The identity transform: [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]. */
const CATransform3D CATransform3DIdentity;

//判斷一個(gè)transform3D的對(duì)象是否是最初的樣子
/* Returns true if 't' is the identity transform. */
bool CATransform3DIsIdentity (CATransform3D t);


//比較兩個(gè)transform3D對(duì)象是否等同
/* Returns true if 'a' is exactly equal to 'b'. */
bool CATransform3DEqualToTransform (CATransform3D a, CATransform3D b);

//將兩個(gè) transform3D對(duì)象變換屬性進(jìn)行疊加调煎,返回一個(gè)新的transform3D對(duì)象
/* Concatenate 'b' to 'a' and return the result: t' = a * b. */
CATransform3D CATransform3DConcat (CATransform3D a, CATransform3D b);

//類似CGAffineTransform 中的CGAffineTransformInvert 代表 反向變換
/* Invert 't' and return the result. Returns the original matrix if 't'
 * has no inverse. */
CA_EXTERN CATransform3D CATransform3DInvert (CATransform3D t)


//-----平移
//返回一個(gè)平移變換的transform3D對(duì)象 tx镜遣,ty,tz對(duì)應(yīng)x士袄,y悲关,z軸的平移
CATransform3D CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz);
//在某個(gè)transform3D變換的基礎(chǔ)上進(jìn)行平移變換谎僻,t是上一個(gè)transform3D,其他參數(shù)同上
CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);


//-----縮放
//x寓辱,y艘绍,z分別對(duì)應(yīng)x軸,y軸秫筏,z軸的縮放比例
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
//在一個(gè)transform3D變換的基礎(chǔ)上進(jìn)行縮放變換诱鞠,其他參數(shù)同上
CATransform3D CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz);


//-----旋轉(zhuǎn)
//angle參數(shù)是旋轉(zhuǎn)的角度 ,x跳昼,y般甲,z決定了旋轉(zhuǎn)圍繞的中軸,取值為-1 — 1之間鹅颊,如(1,0墓造,0),則是繞x軸旋轉(zhuǎn)堪伍,(0.5,0.5觅闽,0)帝雇,則是繞x軸與y軸中間45度為軸旋轉(zhuǎn)
CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
//在一個(gè)transform3D的基礎(chǔ)上進(jìn)行旋轉(zhuǎn)變換,其他參數(shù)如上
CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z);

  • 常用使用方法
//CALayer的3D旋轉(zhuǎn)
 CATransform3D turnTrans = CATransform3DMakeRotation(M_PI / 4, 0, 0, 1);
 self.imageView.layer.transform = turnTrans;
  • 平移蛉拙,縮放尸闸,旋轉(zhuǎn),我們也可以使用KVO來實(shí)現(xiàn)
//x軸方向平移
[self.imageView.layer setValue:@(100) forKeyPath:@"transform.translation.x"];
//y軸方向平移
[self.imageView.layer setValue:@(100) forKeyPath:@"transform.translation.y"];
//沿著z方向平移
[self.imageView.layer setValue:@(100) forKeyPath:@"transform.translation.z"];

//沿著z軸旋轉(zhuǎn)
[self.imageView.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.z"];
//沿著x軸旋轉(zhuǎn)
[self.imageView.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.x"];
//沿著y軸旋轉(zhuǎn)
[self.imageView.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.y"];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孕锄,一起剝皮案震驚了整個(gè)濱河市吮廉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畸肆,老刑警劉巖宦芦,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異轴脐,居然都是意外死亡调卑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門大咱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恬涧,“玉大人,你說我怎么就攤上這事碴巾∷堇Γ” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵餐抢,是天一觀的道長(zhǎng)现使。 經(jīng)常有香客問我低匙,道長(zhǎng),這世上最難降的妖魔是什么碳锈? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任顽冶,我火速辦了婚禮,結(jié)果婚禮上售碳,老公的妹妹穿的比我還像新娘强重。我一直安慰自己,他們只是感情好贸人,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布间景。 她就那樣靜靜地躺著,像睡著了一般艺智。 火紅的嫁衣襯著肌膚如雪倘要。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天十拣,我揣著相機(jī)與錄音封拧,去河邊找鬼。 笑死夭问,一個(gè)胖子當(dāng)著我的面吹牛泽西,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缰趋,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捧杉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了秘血?” 一聲冷哼從身側(cè)響起味抖,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎直撤,沒想到半個(gè)月后非竿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谋竖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年红柱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖乘。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锤悄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘉抒,到底是詐尸還是另有隱情零聚,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站隶症,受9級(jí)特大地震影響政模,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚂会,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一淋样、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胁住,春花似錦趁猴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至余指,卻和暖如春捕犬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酵镜。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工或听, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笋婿。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像顿颅,于是被迫代替她去往敵國(guó)和親缸濒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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