很可能是一個簡單的CoreAnimation效果,調節所述視圖變換,而不是幀。這應該適用於任何觀點。我很樂觀,你缺乏敏銳是陌生而不是真正的不喜歡,所以我會繼續與CoreAnimation的答案,以防萬一它有幫助...
UIView有一個非常方便的方法來設置動畫。例如,要做的視圖的動畫縮小到一半大小,離開它集中在相同的位置:
[UIView beginAnimations:nil context:nil];
view.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
[UIView commitAnimations];
要縮小其與50個像素移動其中心向右:
[UIView beginAnimations:nil context:nil];
view.transform = CGAffineTransformTranslate(CGAffineTransformMakeScale(0.5f, 0.5f), 50.0f, 0.0f);
[UIView commitAnimations];
並把它從任一狀態恢復到正常:
[UIView beginAnimations:nil context:nil];
webView.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
[UIView commitAnimations];
理論背後卻是意見某些屬性是動畫。這些都是CoreAnimation能夠獨立進行動畫調整的屬性。 UIView類方法beginAnimations:context:和commitAnimations設置,然後開始一個CoreAnimation塊。從本質上講,beginAnimations:context:不會立即生效,而是設置爲動畫的目標狀態。當您執行commitAnimations時,會出現動畫。
還有一些其他控件可以用來通過UIView便捷方法調整動畫,所有這些都在UIView文檔中描述。
如果你不使用CoreAnimation,那麼你必須自己對這個轉換進行逐幀調整,但我真的沒有看到這種方法的好處 - 它會花費更多以CPU計算,並且不太可能接近平穩。
絕對堅持轉換,而不是調整幀,如果你可以;調整變換會改變視圖添加到屏幕的方式。它不會導致視圖本身重繪。所以如果你改變比例,就像放大視圖的圖像一樣。如果你改變了框架或邊界,那麼iOS將放棄它當前的視圖外觀和請求重繪的緩衝區,這會花費更多。更糟糕的是,如果您有任何坐在CATiledLayer上的東西(例如地圖視圖或Web視圖),那麼該視圖將變成其背景顏色,並且可能不會再次淡入,直到動畫完成。同樣,任何決定如何基於框架大小繪製的視圖都不會按比例縮放,而只是改變大小。
嗨湯米,謝謝你的詳細回覆。我一直在使用UIView動畫來做一些基本的東西,以及CATransition,這就是我對CoreAnimation的體驗結束的地方。我從來沒有碰過的是視圖轉換屬性,主要是因爲我沒有機會真正理解它。但根據你的建議,它看起來並不複雜,似乎是做我要找的東西的方法。現在怎麼樣轉換到縮略圖視圖?我可以在同一個動畫塊中添加它作爲子視圖,初始alpha值爲0並增加它嗎? – boliva 2010-11-12 15:05:36
作爲子視圖添加立即生效,無論是在動畫塊內部還是外部,但alpha都是動畫屬性,因此應該可以安全地將其添加爲alpha,然後將alpha設置爲1以便平滑過渡。 – Tommy 2010-11-12 15:57:20