Core Animation 的隱式動畫

2021-07-06 02:15:29 字數 2531 閱讀 9700

那我們來看看系統究竟幫我們做了哪些東西。

如果你自己設定了動畫型別和動畫時間,表現出來就是你指定的動畫,如果沒有,那麼系統會自動幫我們做了動畫型別和動畫時間(這就是隱式動畫)。

note:catransaction概念

catransaction沒有屬性或者例項方法,並且也不能用+alloc和-init方法建立它。但是可以用+begin和+commit分別來入棧或者出棧

隱式動畫真正背後執行的原因:

core animation在每個run loop週期中自動開始一次新的事務(run loop是ios負責收集使用者輸入,處理定時器或者網路事件並且重新繪製螢幕的東西),即使你不顯式的用[catransaction begin]開始一次事務,任何在一次run loop迴圈中屬性的改變都會被集中起來,然後做一次0.25秒的動畫。

如果你不用系統的動畫模式,要自定義,最原始的樣子就是下面

- (ibaction)changecolor

先上**,讓大家看看問題。

@inte***ce

viewcontroller ()

@property (nonatomic, weak) iboutlet

uiview *layerview;

@end

@implementation

viewcontroller

- (void)viewdidload

- (ibaction)changecolor

執行程式,你會發現當按下按鈕,圖層顏色瞬間切換到新的值,而不是之前平滑過渡的動畫。發生了什麼呢?

先給結論:

1、是給uiview做的動畫,那麼一定要用uiview層的動畫模式(uiview有兩個方法,+beginanimations:context:和+commitanimations)。

2、是給calayer做動畫,那麼一定用catransaction begin相關的方法。

原因就是上面程式出現的問題:uiview關聯的圖層禁用了隱式動畫,造成了動畫沒有。

再深入一點,隱式動畫是如何被uikit禁用掉呢?

解決這個問題,先看看這個系統大概是如何實現隱式動畫?

calayer的屬性被修改時候,layer首先檢測它是否有委託,

1、有**物件,它會呼叫-actionforkey:方法,

2、沒有**物件,去找圖層動畫的action(以那種動畫展現),它最後最後會呼叫,defaultactionforkey:這個應該就是隱式動畫效果

很顯然,uiview做了layer的**,再uiview內部實行了-actionforkey:方法,估計如果不是呼叫uiview的動畫方法時,實現的協議方法actionforkey:裡面返回乙個nil,如果呼叫uiview的自己的動畫方法,就返回值,產生了動畫。

上面也可以總結一點:uikit建立在core animation(預設對所有東西都做動畫)之上,所有core animation的動畫方法,再uikit層都有對應的。

比如:

1、uiview有兩個方法,+beginanimations:context:和+commitanimations,和catransaction的+begin和+commit方法類似。

2、 uiview的block的動畫允許你在動畫結束的時候提供乙個完成的動作。catranscation介面提供的+setcompletionblock:方法也有同樣的功能。

在上面講系統大概是如何實現隱式動畫,說到」沒有**物件,去找圖層動畫的action(以那種動畫展現)」,如果我不想用系統提供的動畫效果,有沒有其他的動畫效果可以執行。

@inte***ce

viewcontroller ()

@property (nonatomic, weak) iboutlet

uiview *layerview;

@property (nonatomic, weak) iboutlet calayer *colorlayer;

@end

@implementation

viewcontroller

- (void)viewdidload

; //add it to our view

[self

.layerview

.layer addsublayer:self

.colorlayer];

}@end

上面就做到了自定義action(動畫效果)。

注意:這裡要提醒大家:catransition和catransaction的區別。

這個就能看出catransition和catransaction真正的區別了吧。

只要記住後面單詞的區別:

action結尾的就是開始動畫、提交動畫(action行為的事情)

sition結尾的就是名詞,就是自定義動畫相關的屬性,

Core Animation動畫概述

core animation動畫概述 1 概述 在ios中,圖形可分為以下幾個層次 越上層,封裝程度越高,動畫實現越簡潔越簡單,但是自由度越低。本文著重介紹core animation層的動畫實現方案。2 動畫概念類 在ios中,展示動畫可以模擬於顯示生活中的 拍電影 拍電影有三大要素 演員 劇本 ...

IOS動畫Core Animation詳解

在ios中如果使用普通的動畫則可以使用uikit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用core animation了。下面詳解各種型別動畫的使用方式 plain view plain copy void animationofuikit plain view plain copy ...

IOS動畫Core Animation詳解

在ios中如果使用普通的動畫則可以使用uikit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用core animation了。下面詳解各種型別動畫的使用方式 plain view plain copy void animationofuikit plain view plain copy ...