轉 UIView 動畫的兩種程式設計方式

2021-09-01 09:51:56 字數 3803 閱讀 4336

ios  中的 uiview 動畫程式設計其實還是很簡單的,像 css3 一樣,在給定的時間內完成狀態連續性的變化呈現。比如背景色,frame 大小,位移、翻轉,特明度等。

以前我使用的程式設計方式都是用下面那樣的三段式處理:

1

2

3

4

5

6

7

8

[uiviewbeginanimations:nilcontext:nil];

[uiviewsetanimationduration:1.0];

//要動畫改變的屬性

self.view.alpha = 0.0;

self.view.frame = cgrectmake(10, 10, 50, 50);

[uiviewcommitanimations];

那麼被 beginanimations 和  commitanimations 框起來的**就會讓你產生動畫效果,這種方式像是資料庫中的事物程式設計一樣。

還有另一種程式設計方式,使用**塊,對於常常書寫 js **的同志會比較適應,還是來個簡單的**片段:

1

2

3

4

5

[uiviewanimatewithduration:1.0

animations:^];

對於不太複雜的動畫,上面的寫法很精練,因為只有一條語句,如果動畫太過複雜了,寫在這樣一條語句中就會顯得冗長了,對於**除錯沒那麼方便。

animatewithduration 有三個過載方法:

比如我們用最後面那個過載方法,可以比 beginanimations...commitanimations 更輕鬆的實現動畫完後執行的動作,如:

01

02

03

04

05

06

07

08

09

10

[uiviewanimatewithduration:1.0

delay: 0.0

options:uiviewanimationoptioncurveeasein

animations:^

completion:^(boolfinished)];

再回頭看看 beginanimations...commitanimations 該如何實現上面同樣的行為:

01

02

03

04

05

06

07

08

09

10

11

12

13

[uiviewbeginanimations:nilcontext:nil];

[uiviewsetanimationduration:1.0];

[uiviewsetanimationdelay:0.0];

[uiviewsetanimationcurve:uiviewanimationcurveeasein];

[uiviewsetanimationdelegate:self];

[uiviewsetanimationdidstopselector:@selector(animationstopped)];

self.view.alpha = 0.0;

self.view.frame = cgrectmake(10, 10, 50, 50);

[uiviewcommitanimations];

還要給當前類加乙個方法 animationstopped:

1

2

3

-(void) animationstopped

**是多些,但是 beginanimations...commitanimations 程式設計方式是全能的,而 animatewithduration 是有侷限性的,因為它的目的就是讓編寫**更簡潔。在 animatewithduration 中只提供了 completion **塊,意即在動畫完成後執行的動作,而要達成

[uiview setanimationwillstartselector:@selector(animationwillstart)]

這樣的在動畫即將啟動之前的動作卻是無能為力,還有些動畫設定也是 animatewithduration 做不到。所以一旦你先前用 animatewithduration  實現的動畫方式要增加稍複雜的功能而不得不用 beginanimations...commitanimations 來改寫時,付出就大了。

該用哪種方式,只能自己斟酌吧。

UIView 動畫的兩種程式設計方式

2011 09 18 unmi ios 中的 uiview 動畫程式設計其實還是很簡單的,像 css3 一樣,在給定的時間內完成狀態連續性的變化呈現。比如背景色,frame 大小,位移 翻轉,特明度等。以前我使用的程式設計方式都是用下面那樣的三段式處理 1 2 3 4 5 6 7 8 uiviewb...

iOS中畫 UIView的兩種方式

前提 首先有乙個uiview,然後重寫view的 drawrect方法,在這個方法進行繪圖,同時在寫程式時,我們不能直接呼叫drawrect,需要更新繪畫時,我們需要直接呼叫 setneedsdisplay。1.使用 uibezierpath 使用這個就已經知道是在當前view的context上,所...

程式設計的兩種方式執行Spark SQL查詢(方式二)

現在我們來實現在自定義程式中編寫spark sql查詢程式。實現查詢的方式有兩種 方式一 通過反射推斷schema。方式二 通過structtype直接指定schema。這次我們用方式二來實現自定義查詢。具體程式如下 package cn.allengao.sparksql import org.a...