日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(转) Core Animation 简介

發(fā)布時間:2024/4/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转) Core Animation 简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文出處:(http://hi.baidu.com/zijian0428/blog/item/6085e5fe8ff987225d60083b.html)

1.????簡介

Core animation 是以objc語言封裝的一套圖形渲染,投影及動畫的庫的集合。
Core animation 使創(chuàng)建用戶界面變得非常容易,通過以下方法:
1.????使用簡單的編程方法實現(xiàn)高性能的合成
2.????使用層對象創(chuàng)建復雜的用戶界面
3.????輕量型數(shù)據(jù)結構,能夠同時使幾百個層產(chǎn)生動畫。
4.????不依賴于應用程序主線程,動畫在單獨的線程里運行。
5.????改進了應用程序性能。應用程序只需要重畫它變化的部分(局部刷新)。
6.????靈活的布局管理模式。

2.????相關類
????使用core animation,開發(fā)者不需要使用底層的API或者OpenGL就可以創(chuàng)建漂亮的動畫界面。
core animation類分成以下幾個:
1.????提供顯示內(nèi)容的層(layer)。
2.????動畫和時間類(Animation and timing classes)。
3.????布局和約束類(Layout and constraint classes)。
4.????將多個層分成幾個原子更新的執(zhí)行類。

2.1????層(layrer)

????層 是 core animation的基礎。視圖(UIView)的一個實例,有一個CALayer實例做為父層(superlayer) 以及在這層上添加的所有子層,創(chuàng)建的層結構稱為layer tree(層之間的結構像一顆樹)。在畫層時,所有的層指定一個相對于父層的坐標,然后從最后一層往前畫,就像畫視圖一樣。層允許更復雜的轉換,比如旋 轉,傾斜,放大縮小,投影層的內(nèi)容。
層還管理與其相關的動畫和作用(action,這里翻譯不形象,高手請指教)。從layer tree中插入或者刪除層,修改層的屬性以及應用程序請求都會觸發(fā)動畫發(fā)生。

2.2動畫和時間類

?????隱式動畫
????層的許多可視屬性的改變可以產(chǎn)生隱式的動畫效果,因為這些屬性都默認地與一個動畫相關聯(lián)。通過簡單地設置可視的屬性值,層會由當前值到被設置的值產(chǎn)生漸變的動畫效果。比如,設置層的隱藏屬性為真,將觸發(fā)一個逐漸消失的動畫效果。
?????顯式動畫
????可設置動畫的屬性也可以產(chǎn)生顯式的動畫效果,通過創(chuàng)建一個動畫類和指定所需要的動畫效果。顯式的動畫并不改變層的屬性。
所 有的核心動畫類都由抽象類CAAnimation繼承而來。CAAnimation采用CAMediaTiming協(xié)議。 CAMediaTiming規(guī)定了動畫的持續(xù)時間,速度及重復次數(shù)。CAAnimation也采用了CAAction協(xié)議,該協(xié)議規(guī)定了在響應由層觸發(fā)的 動作時,開始一個動畫的標準方式。

????核心動畫還提供了其它 的動畫類:
?????CATransition。CATransition規(guī)定了影響整個層內(nèi)容的轉換效果。在動畫期間,它使層產(chǎn)生漸變(fade),推拉(push)以及揭示(reveal)的動畫效果。這些常用的轉換效果可以通過核心繪圖過濾器進行擴展。
核心繪圖過濾器相關中文鏈接:?http://www.apple.com.cn/developer/Documentation/GraphicsImaging/Conceptual/CoreImaging/index.html
?????CAAnimation。CAAnimation允許大量的動畫對象被分成幾組,并且可以同時運行。
?????CAPropertyAnimation 。是CAAnimation 的子類,支持層在動畫期間,為層指定一個關鍵路徑。
?????CABasicAnimation。該類為層的屬性提供了簡單的插值。(我理解為:由于要產(chǎn)生動畫,因此為了使在開始和結束期間產(chǎn)生動畫,要為層屬性所設置的區(qū)間值插入其它的值。)
?????CAKeyframeAnimation。 CAKeyframeAnimation提供關鍵幀動畫的支持。你可以為可設置動畫的層的屬性指定一個關鍵路徑,路徑可以是一個數(shù)組,保存了動畫每個階段 的????值,和關鍵幀的動畫次數(shù)及時間函數(shù)。當動畫運行時,在插值時,每個值會被輪流使用。

2.3布局管理類:
????CAKeyframeAnimation類用于管理所有子層的布局。每個由CAConstraint類封裝的實例描述了各子層之間的幾何位置關系。

2.4執(zhí)行管理類
????可設置動畫層的屬性的修改必須是執(zhí)行的一部分。CATransaction負責將許多動畫分成幾批原子型的更新進行顯示。

3.????類層次圖

?
?

?

第三章???? 層的坐標及轉換

????這章節(jié)主要描述層坐標的構成要素,構成要素之間的關系及如何轉換產(chǎn)生復雜的效果。

1????層坐標系統(tǒng)
層 坐標使用了和Quanz圖形一樣的坐標系統(tǒng)。默認情況下,原點(0.0, 0.0)在左下角,向右及向上增長。請注意:該坐標系統(tǒng)是不同于UIView實例的坐標系統(tǒng),UIView系統(tǒng)的原點在左上角,向右及向下增長。每個層的 實例都維護自己的坐標系統(tǒng),定位所有的子層及繪圖時都是相對于這個坐標系統(tǒng)。

2????層的幾何坐標
層的幾何坐標系統(tǒng)圖:
?


2.1???? Bounds
沒有人不知道這東東,跳過。

2.2????Position
CGPoint類型,指定了相對于父層(superlayer)的位置,由父層的坐標系統(tǒng)來表示。
2.3????Frame
改變層的frame時,層的position和bounds會相應的改變,但層并沒有frame屬性,它是由層的position, bounds, anchorPoint(參照點) 和transform計算而來。

2.4????Anchor point 參照點
今天的重點屬性。一定要理解。該屬性是在層的bounds范圍內(nèi)的一個點,值為0.0到1.0。所有的轉換都是相對于這個點進行計算的。
下圖是三個anchor point的值:
???


接下來,我們來看一下frame, bounds, position 及 anchorPoint之間的關系。
如下圖:
?
?


在 這個圖中,anchor point的默認值為(0.5,0.5),相當于層的中心。如果你設置frame為(40.0, 60.0, 120.0, 80.0),則position值會被自動設置為(100,100)。我們還可以看到旋轉和縮放的轉換計算都是相對于參照點進行的。

下圖的frame的大小和圖3是一樣的,但是anchor point為(0.0,0.0):
?
?


2.5????cornerRadius
當要繪圖,剪輯子層,畫邊框及陰影時,可以指定層所使用的半徑大小以產(chǎn)生圓角效果。

3????層的幾何坐標轉換
上面講了那么多,都是為這一小節(jié)坐鋪墊的。
CATransform3D結構體定義了一個用于旋轉,縮放,偏移,傾斜及應用透視變換
的三維坐標變換。原型如下:
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;
可以將該結構體賦值給層的兩個屬性transform 或者sublayerTransform,就可以實現(xiàn)坐標轉換。

你可以通過以下三個方法來創(chuàng)建和修改這個結構體:
1)????使用CATransform3D函數(shù)獲取
2)????直接修改結構體數(shù)據(jù)成員
3)????使用鍵值編碼和鍵路徑(key paths)

3.1????轉換函數(shù)

3.1.1????平移,縮放及旋轉轉換函數(shù)(以下如何進行坐標轉換計算實在是看不懂,線性代數(shù)太濫了,真后悔當初沒好好學,^&^。高手請指教):



示例:
reflectionLayer.transform = CATransform3DMakeScale(1.0, -1.0, 1.0);?
該函數(shù)使層的Y坐標反轉,產(chǎn)生倒影效果。
論談里有一個關于CATransform3DMakeScale矩陣轉換的使用例子,大家可以看一下,對于理解矩陣轉換還是很有幫助的,地址:http://www.cocoachina.com/macdev/ca/2009/0611/33.html

系統(tǒng)也提供了反轉矩陣的函數(shù)CATransform3DInvert。

3.1.2????仿射轉換函數(shù):
??


3.1.3????測試是否是相等的函數(shù):?



3.2????使用鍵路徑(key paths)修改轉換函數(shù)?



示例:
myLayer.transform.rotation.x=0;
[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];

轉載于:https://www.cnblogs.com/ylucy/archive/2011/06/29/2093437.html

總結

以上是生活随笔為你收集整理的(转) Core Animation 简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。