亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解iOS的Core Animation框架中的CATransform3D圖形變換

 更新時(shí)間:2016年07月11日 09:31:08   作者:琿少  
CATransform3D一般用于操作view的layer的,是Core Animation的結(jié)構(gòu)體,可以用來(lái)做比較復(fù)雜的3D操作,這里我們就帶大家來(lái)詳解iOS的Core Animation框架中的CATransform3D圖形變換

一、矩陣坐標(biāo)
CATransform3D定義了一個(gè)變化矩陣,通過(guò)對(duì)矩陣參數(shù)的設(shè)置,我們可以改變layer的一些屬性,這個(gè)屬性的改變,可以產(chǎn)生動(dòng)畫的效果。
CATransform3D CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz)
tx:X軸偏移位置,往下為正數(shù)。
ty:Y軸偏移位置,往右為正數(shù)。
tz:Z軸偏移位置,往外為正數(shù)。
例:
如果有2個(gè)圖層,一個(gè)是綠色的,一個(gè)是紅色的。先加載綠色,后加載紅色。
tx,ty的左右偏移先不說(shuō)了。
如果綠色的tz為-10 ,紅色的tz為 0 效果如下。

201671191954573.png (152×150)

如果綠色的tz為 0 ,紅色的tz為-10 效果如下。

201671192029709.png (151×150)

對(duì)于tz來(lái)說(shuō),值越大,那么圖層就越往外(接近屏幕),值越小,圖層越往里(屏幕里)。
CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);
t:就是上一個(gè)函數(shù)。其他的都一樣。
就可以理解為:函數(shù)的疊加,效果的疊加。
CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
sx:X軸縮放,代表一個(gè)縮放比例,一般都是 0 --- 1 之間的數(shù)字。
sy:Y軸縮放。
sz:整體比例變換時(shí),也就是m11(sx)== m22(sy)時(shí),若m33(sz)>1,圖形整體縮小,若0<1,圖形整體放大,若m33(sz)<0,發(fā)生關(guān)于原點(diǎn)的對(duì)稱等比變換。
當(dāng)sx = 1,sy = 1時(shí)。如圖:

201671192103475.png (151×152)

當(dāng)sx = 0.5,sy = 0.5時(shí)。如圖:

201671192120345.png (152×154)

CATransform3D CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz)
t:就是上一個(gè)函數(shù)。其他的都一樣。
就可以理解為:函數(shù)的疊加,效果的疊加。
CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
旋轉(zhuǎn)效果。
angle:旋轉(zhuǎn)的弧度,所以要把角度轉(zhuǎn)換成弧度:角度 * M_PI / 180。
x:向X軸方向旋轉(zhuǎn)。值范圍-1 --- 1之間
y:向Y軸方向旋轉(zhuǎn)。值范圍-1 --- 1之間
z:向Z軸方向旋轉(zhuǎn)。值范圍-1 --- 1之間
例:向X軸旋轉(zhuǎn)60度。

201671192143349.png (224×229)

向Y軸旋轉(zhuǎn)60度。

201671192202793.png (224×229)

向Z軸旋轉(zhuǎn)60度。

201671192545073.png (304×292)

向 X軸,Y軸都旋轉(zhuǎn)60度,就是沿著對(duì)角線旋轉(zhuǎn)。

201671192648071.png (227×226)
可以通過(guò)X,Y,Z軸同時(shí)變化,來(lái)旋轉(zhuǎn)圖像。
CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
t:就是上一個(gè)函數(shù)。其他的都一樣。
就可以理解為:函數(shù)的疊加,效果的疊加。
CATransform3D CATransform3DInvert (CATransform3D t);
翻轉(zhuǎn)效果。

201671192247252.png (304×292)201671192357331.png (292×287)

CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t);
bool CATransform3DIsAffine (CATransform3D t);
仿射效果。
就是把一個(gè) CATransform3D 對(duì)象轉(zhuǎn)換成一個(gè) CGAffineTransform 對(duì)象。
也就是把 CATransform3D 矩陣 轉(zhuǎn)換成 CGAffineTransform 矩陣
變換函數(shù)同時(shí)提供了可以比較一個(gè)變換矩陣是否是單位矩陣,或者兩個(gè)矩陣是否相等。
bool CATransform3DIsIdentity (CATransform3D t);
bool CATransform3DEqualToTransform (CATransform3D a, CATransform3D b);
也可以通過(guò)修改數(shù)據(jù)結(jié)構(gòu)和鍵值來(lái)設(shè)置變換效果。
struct CATransform3D
               {

                 CGFloat m11, m12, m13, m14;

                           CGFloat m21, m22, m23, m24;

                           CGFloat m31, m32, m33, m34;

                                  CGFloat m41, m42, m43, m44;
}
可以直接修改 其中的一個(gè)值,來(lái)達(dá)到相同的效果。
或者修改鍵值
[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];

二、CATransform3D中的屬性和方法
//初始化一個(gè)transform3D對(duì)象,不做任何變換
const CATransform3D CATransform3DIdentity;
//判斷一個(gè)transform3D對(duì)象是否是初始化的對(duì)象
bool CATransform3DIsIdentity (CATransform3D t);
//比較兩個(gè)transform3D對(duì)象是否相同
bool CATransform3DEqualToTransform (CATransform3D a, CATransform3D b);
//將兩個(gè) transform3D對(duì)象變換屬性進(jìn)行疊加,返回一個(gè)新的transform3D對(duì)象
CATransform3D CATransform3DConcat (CATransform3D a, CATransform3D b);
1、平移變換
//返回一個(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);
例如:

    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    imageView.image = [UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:imageView];
   
    UIImageView * newImageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    newImageView.image=[UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:newImageView];
    CATransform3D trans = CATransform3DMakeTranslation(10, 200, 0);
    newImageView.layer.transform =trans;
效果如下:

201671192753788.png (206×383)

2、縮放變換
//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);
例如:
UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    imageView.image = [UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:imageView];
   
    UIImageView * newImageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];
    newImageView.image=[UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:newImageView];
    CATransform3D trans = CATransform3DMakeScale(2, 1, 1);
    newImageView.layer.transform =trans;
效果如下:

201671192812038.png (212×378)

3、旋轉(zhuǎn)變換
//angle參數(shù)是旋轉(zhuǎn)的角度,為弧度制 0-2π
//x,y,z決定了旋轉(zhuǎn)圍繞的中軸,取值為-1——1之間,例如(1,0,0),則是繞x軸旋轉(zhuǎn)(0.5,0.5,0),則是繞x軸與y軸中
//間45度為軸旋轉(zhuǎn),依次進(jìn)行計(jì)算
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);
例如:
UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    imageView.image = [UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:imageView];
   
    UIImageView * newImageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];
    newImageView.image=[UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:newImageView];
    CATransform3D trans = CATransform3DMakeRotation(M_PI/2, 0, 0, 1);
    newImageView.layer.transform =trans;
效果如下:

201671192840809.png (210×395)

另外,當(dāng)我們有垂直于z軸的旋轉(zhuǎn)分量時(shí),設(shè)置m34的值可以增加透視效果,也可以理解為景深效果,例如:

    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    imageView.image = [UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    imageView.layer.transform = CATransform3DMakeRotation(M_PI/4, 0, 1, 0);
    [self.view addSubview:imageView];
   
    UIImageView * newImageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];
    newImageView.image=[UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:newImageView];
    CATransform3D trans = CATransform3DIdentity;
    trans.m34 = -1/100.0;
    trans = CATransform3DRotate(trans, M_PI/4, 0, 1, 0); 
    newImageView.layer.transform =trans;
兩個(gè)imageView都進(jìn)行了y軸的旋轉(zhuǎn)變換,第二個(gè)有透視效果,第一個(gè)沒(méi)有,運(yùn)行如下:

201671192903446.png (208×394)

4、旋轉(zhuǎn)翻轉(zhuǎn)變換
//將一個(gè)旋轉(zhuǎn)的效果進(jìn)行翻轉(zhuǎn)
CATransform3D CATransform3DInvert (CATransform3D t);
例如:
    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    imageView.image = [UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    imageView.layer.transform = CATransform3DMakeRotation(M_PI/4, 0, 0, 1);
    [self.view addSubview:imageView];
   
    UIImageView * newImageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];
    newImageView.image=[UIImage imageNamed:@"屏幕快照 2015-12-06 下午3.27.15.png"];
    [self.view addSubview:newImageView];
    CATransform3D trans = CATransform3DMakeRotation(M_PI/4, 0, 0, 1);
    trans = CATransform3DInvert(trans);
   
    newImageView.layer.transform =trans;
5、CATransform3D與CGAffineTransform的轉(zhuǎn)換
CGAffineTransform是UIKit框架中一個(gè)用于變換的矩陣,其作用與CATransform類似,只是其可以直接作用于View,而不用作用于layer,這兩個(gè)矩陣也可以進(jìn)行轉(zhuǎn)換,方法如下:
//將一個(gè)CGAffinrTransform轉(zhuǎn)化為CATransform3D
CATransform3D CATransform3DMakeAffineTransform (CGAffineTransform m);
//判斷一個(gè)CATransform3D是否可以轉(zhuǎn)換為CAAffineTransform
bool CATransform3DIsAffine (CATransform3D t);
//將CATransform3D轉(zhuǎn)換為CGAffineTransform
CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t);

相關(guān)文章

  • iOS實(shí)現(xiàn)百度地圖定位簽到功能

    iOS實(shí)現(xiàn)百度地圖定位簽到功能

    這篇文章主要給大家介紹了iOS實(shí)現(xiàn)百度地圖定位簽到功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • IOS在Table View添加3D Touch功能

    IOS在Table View添加3D Touch功能

    在IOS開(kāi)發(fā)中教給大家如何在Table View中添加 3D Touch Peek & Pop的功能,需要的朋友學(xué)習(xí)一下吧。
    2017-12-12
  • iOS?Segment帶滑動(dòng)條切換效果

    iOS?Segment帶滑動(dòng)條切換效果

    這篇文章主要為大家詳細(xì)介紹了iOS?Segment帶滑動(dòng)條切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • iOS如何將UIButton中的圖片與文字上下對(duì)齊詳解

    iOS如何將UIButton中的圖片與文字上下對(duì)齊詳解

    對(duì)于UIButton實(shí)現(xiàn)上顯示圖片,下顯示文字這個(gè)需求估計(jì)各位iOS開(kāi)發(fā)者們都不陌生,所以下面這篇文章主要給大家介紹了關(guān)于iOS如何將UIButton中圖片與文字上下對(duì)齊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • IOS中無(wú)限滾動(dòng)Scrollview效果

    IOS中無(wú)限滾動(dòng)Scrollview效果

    這篇文章主要為大家詳細(xì)介紹了IOS中無(wú)限滾動(dòng)Scrollview效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • iOS使用Charts框架繪制折線圖

    iOS使用Charts框架繪制折線圖

    本文主要介紹了iOS使用Charts框架繪制折線圖的方法,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2016-12-12
  • iOS應(yīng)用進(jìn)入后臺(tái)后計(jì)時(shí)器和位置更新停止問(wèn)題的解決辦法

    iOS應(yīng)用進(jìn)入后臺(tái)后計(jì)時(shí)器和位置更新停止問(wèn)題的解決辦法

    這篇文章主要介紹了iOS應(yīng)用進(jìn)入后臺(tái)后計(jì)時(shí)器和位置更新停止問(wèn)題的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • 解決iOS13 無(wú)法獲取WiFi名稱(SSID)問(wèn)題

    解決iOS13 無(wú)法獲取WiFi名稱(SSID)問(wèn)題

    這篇文章主要介紹了解決iOS13 無(wú)法獲取WiFi名稱(SSID)問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • IOS實(shí)現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    IOS實(shí)現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果

    這篇文章主要為大家詳細(xì)介紹了IOS實(shí)現(xiàn)選擇城市后跳轉(zhuǎn)Tabbar效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • IOS 禁止縮放頁(yè)面的實(shí)現(xiàn)方法

    IOS 禁止縮放頁(yè)面的實(shí)現(xiàn)方法

    這篇文章主要介紹了IOS 禁止縮放頁(yè)面的實(shí)現(xiàn)方法的相關(guān)資料,這里主要介紹了IOS 10如何通過(guò)設(shè)置來(lái)實(shí)現(xiàn)禁止縮放及實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-07-07

最新評(píng)論