我在我的智慧結尾試圖想出一個這種範例的設計模式。我在這個網站上沒有多少運氣,但在這個階段我會嘗試任何事情。UIView無限循環動畫在每個重複循環後調用一個方法
我試圖實現一個雷達類型的動畫,因此我旋轉的視圖360度來表示半徑周圍的圓旋轉。我已經在這個圓周上放置了點,並且能夠使用標準的trig來計算圓心的角度。
作爲圍繞圓半徑掃描,如果它與一個點相交(例如,點的角等於掃半徑+公差的角度)的點上閃爍。
現在,我已經在很多的方式來實現這種模式,但都沒有取得理想的解決方案。這是我嘗試過的。
FIRST:iOS4動畫塊。我會一次旋轉半徑10度,持續時間爲0.1秒,在完成方法中,檢查與點的交點。這裏的問題是,如果您將該選項設置爲重複,則不會調用完成方法。調用完成方法的唯一時間是整個動畫終止時,而不是每個重複循環之後,因此此解決方案不起作用。
SECOND:嘗試使用CABasicAnimation顯式動畫。與上述方法相同,每0.1秒旋轉10度,並將委託設置爲自我並實現animationDidFinish方法。在animationDidFinish方法中,我檢查了與點的交點。我將動畫設置爲累積並重復拍攝以獲得巨大價值。該raduis旋轉,但再次,animationDidFinish不會被調用,除非我將repeatCount設置爲一個小數字,然後它只在repeatCount結束時被調用,而不是在每個重複循環之後。
第三:使用的NSTimer和這種方法確實有效,但動畫可以根據是什麼在屏幕周圍發生的是生澀。我使用0.1秒的計時器刻度,並啓動10度的單個動畫以及每次刻度的交叉檢查。這種方法的問題在於,由於處理器在後臺執行其他動畫,因此在啓動每個動畫時容易受到阻礙。請注意,我沒有其他兩種方法的問題!
第四:我嘗試使用兩者的組合。點上的CABasicAnimation和點上的NSTimer。這裏的問題是,如果iDevice進入休眠狀態,然後恢復,它們可能會不同步併發生。
FIFTH:使用iOS3.0風格動畫塊並用.1sec持續時間旋轉10度。使用animationDidStop方法設置委託和animationDidStopSelector,再次調用動畫方法以及檢查與點的交集。這也起作用,但很像第三種解決方案,當滾動和其他動畫發生時,它很乾。這很可能是由動畫的停止啓動性質引起的。
基本上是有沒有辦法無限動畫視圖但要調用每一個重複週期後的方法?或者有沒有辦法讓第三個解決方案更順利?
請幫助,我已經用盡了設計模式。
我認爲你的應用程序是opengles的好選擇,它會處理你想要做的很棒的性能。如果你想使用框架,你甚至不需要3D以便更容易看看cocos2D。 – Ben 2010-10-13 01:08:51
是的,我聽到你說,問題是我到目前爲止已經學到了很多,我不知道我想重新開始。 – 2010-10-13 03:31:55
我想我正在接近答案,使用第二種解決方案,我可以保留CABasicAnimation對象並在animationDidStop方法中重新應用它。它肯定不是生澀的,但我在累積部分遇到麻煩。 – 2010-10-13 06:15:53