2011-09-18 — unmi
ios 中的 uiview 動畫程式設計其實還是很簡單的,像 css3 一樣,在給定的時間內完成狀態連續性的變化呈現。比如背景色,frame 大小,位移、翻轉,特明度等。
以前我使用的程式設計方式都是用下面那樣的三段式處理:
1
2
3
4
5
6
7
8
[
uiview
beginanimations:
nil
context:
nil
];
[
uiview
setanimationduration:1.0];
//要動畫改變的屬性
self
.view.alpha = 0.0;
self
.view.frame = cgrectmake(10, 10, 50, 50);
[
uiview
commitanimations];
那麼被 beginanimations 和 commitanimations 框起來的**就會讓你產生動畫效果,這種方式像是資料庫中的事物程式設計一樣。
還有另一種程式設計方式,使用**塊,對於常常書寫 js **的同志會比較適應,還是來個簡單的**片段:
1
2
3
4
5
[
uiview
animatewithduration:1.0
animations:^];
對於不太複雜的動畫,上面的寫法很精練,因為只有一條語句,如果動畫太過複雜了,寫在這樣一條語句中就會顯得冗長了,對於**除錯沒那麼方便。
animatewithduration 有三個過載方法:
比如我們用最後面那個過載方法,可以比 beginanimations...commitanimations 更輕鬆的實現動畫完後執行的動作,如:
01
02
03
04
05
06
07
08
09
10
[
uiview
animatewithduration:1.0
delay: 0.0
options:
uiviewanimationoptioncurveeasein
animations:^
completion:^(
bool
finished)];
再回頭看看 beginanimations...commitanimations 該如何實現上面同樣的行為:
01
02
03
04
05
06
07
08
09
10
11
12
13
[
uiview
beginanimations:
nil
context:
nil
];
[
uiview
setanimationduration:1.0];
[
uiview
setanimationdelay:0.0];
[
uiview
setanimationcurve:
uiviewanimationcurveeasein
];
[
uiview
setanimationdelegate:
self
];
[
uiview
setanimationdidstopselector:
@selector
(animationstopped)];
self
.view.alpha = 0.0;
self
.view.frame = cgrectmake(10, 10, 50, 50);
[
uiview
commitanimations];
還要給當前類加乙個方法 animationstopped:
1
2
3
-(
void
) animationstopped
**是多些,但是 beginanimations...commitanimations 程式設計方式是全能的,而 animatewithduration 是有侷限性的,因為它的目的就是讓編寫**更簡潔。在 animatewithduration 中只提供了 completion **塊,意即在動畫完成後執行的動作,而要達成
[uiview setanimationwillstartselector:@selector(animationwillstart)]
這樣的在動畫即將啟動之前的動作卻是無能為力,還有些動畫設定也是 animatewithduration 做不到。所以一旦你先前用 animatewithduration 實現的動畫方式要增加稍複雜的功能而不得不用 beginanimations...commitanimations 來改寫時,付出就大了。
該用哪種方式,只能自己斟酌吧。
轉 UIView 動畫的兩種程式設計方式
ios 中的 uiview 動畫程式設計其實還是很簡單的,像 css3 一樣,在給定的時間內完成狀態連續性的變化呈現。比如背景色,frame 大小,位移 翻轉,特明度等。以前我使用的程式設計方式都是用下面那樣的三段式處理 1 2 3 4 5 6 7 8 uiviewbeginanimations n...
iOS中畫 UIView的兩種方式
前提 首先有乙個uiview,然後重寫view的 drawrect方法,在這個方法進行繪圖,同時在寫程式時,我們不能直接呼叫drawrect,需要更新繪畫時,我們需要直接呼叫 setneedsdisplay。1.使用 uibezierpath 使用這個就已經知道是在當前view的context上,所...
C DLL匯出的兩種方式和鏈結的兩種方式
第一種 匯出方式 extern c declspec dllexport int plus int x,int y extern c declspec dllexport int sub int x,int y extern c declspec dllexport int mul int x,in...