iOS 開發 動畫

2021-09-08 03:54:12 字數 2218 閱讀 4941

理論 uiview vs uilayer

uiview只是calyer之上的封裝,更準確的來說,uiview是calyer的簡版封裝,加上事件處理的集合類。 calayer是quartzcore庫內的類,是ios上最基本的繪製單元。其次,我們知道ios平台的cocoa touch 是源於os x平台的cocoa),是在cocoa的基礎上新增了適用於移動手機裝置的手勢識別、動畫等特性;但從底層實現上來說,cocoa touch與cocoa共用一套底層的庫,其中就包括了quartcore.framework;但quartcore.framework一開始就是為os x設計的,所以其中有部分特性是不適合做移動裝置開發的,比如最重要的座標系統。因此,我們也就不難理解為何uiview/nsview在calayer上做了一層封裝。

基於uiview實現的動畫

簡單的block動畫

彈性動畫

關鍵幀動畫(中間可以新增合適多的幀來做不同的銜接動畫)

calayer動畫

常用屬性 

duration : 動畫的持續時間

begintime : 動畫的開始時間 

repeatcount : 動畫的重複次數 

autoreverses : 執行的動畫按照原動畫返回執行 

timingfunction : 控制動畫的顯示節奏,系統提供五種值選擇, 分別是 

path:關鍵幀動畫中的執行路徑 

type:過渡動畫的動畫型別,系統提供了四種過渡動畫:

subtype : 過渡動畫的動畫方向

基礎動畫主要提供了對於calayer物件中的可變屬性進行簡單動畫的操作。比如:位移、透明度、縮放、旋轉、背景色等等。 重要屬性 fromvalue : keypath對應的初始值 tovalue : keypath對應的結束值。

粒子動畫

transform動畫

transform是乙個非常重要的屬性,它在矩陣變換的層面上改變檢視的顯示效果,完成旋轉、形變、平移等等操作。在它被修改的同時,檢視的frame也會被真實改變。有兩個資料型別用來表示transform,分別是cgaffinetransform和catransform3d。前者作用於uiview,後者為layer層次的變換型別。基於後者可以實現更加強大的功能。 對於想要了解矩陣變換是如何作用實現的,可以參考這篇部落格: cgaffinetransform 放射變換

transform嚴格的說不是一種動畫,而是動畫中的一部分操作,我拿出來說是因為它同時出現在了uiview 動畫和calayer動畫中。

一些應用

利用上面calayer 基礎動畫的**實現下拉剪頭的展開和收起,還可以實現時鐘指標的旋轉

輸入框在輸入錯誤資訊時的搖晃效果。

利用cashapelayer 和cabasicanimation 可以實現載入動畫。

ios渲染檢視的層級圖: 

IOS開發 動畫1

import viewcontroller.h inte ce viewcontroller property weak,nonatomic iboutlet uiview currentview end implementation viewcontroller void viewdidload ...

IOS開發動畫總結

ios開發中常用的動畫方式一共有兩種,uiview動畫效果,還有核心動畫。當然,還有另外一種叫做隱式動畫,後續隨手會介紹隱式動畫。這裡主要介紹uiview動畫效果和簡單的核心動畫的使用。1.直接使用uiview的動畫 uiview beginanimations nil context nil 使用...

iOS開發 動畫程式設計OC篇 (五)動畫組

一 組動畫簡單說明 caanimation的子類,可以儲存一組動畫物件,將caanimationgroup物件加入層後,組中所有動畫物件可以同時併發執行 屬性解析 animations 用來儲存一組動畫物件的nsarray 預設情況下,一組動畫物件是同時執行的,也可以通過設定動畫物件的beginti...