2012-03-28 116 views
1

好的。我看到很多主題都與我在這裏要做的相似,但沒有什麼比較匹配的。也許我的方法離基地很遠。這筆交易。使用drawRect的平滑動畫:和UIPanGestureRecognizer

我在drawRect中爲我的UIView子類繪製圖表。然後,我使用UIPanGestureRecognizer將圖表的偏移量(內部,不在視圖層次結構中)轉換爲右側/左側。這很好,但我的問題是識別器的動作被頻率相對較低。具體來說,所產生的平移比在滾動視圖或表格視圖中要遜色得多。特別是當我的圖表中的點數增加時。現在,我想要做的事情並不是實際觸發平移手勢的動作,而是讓一個計時器以每秒30次的速度觸發,插入從平移開始到當前時刻的偏移量。但是,這變得越來越複雜。

有人有什麼建議嗎?我真的應該用UIScrollView來做這個嗎?我不想這樣做的原因是數據可能在任何一個方向上延伸很遠,我不想一次繪製(或至少存儲)整個路徑,而只是執行當前的部分顯示。我應該使用CAShapeLayer嗎?在我花了一天的時間來玩這些可能性之前,我想要一些輸入...

任何輸入/經驗都是最受歡迎的。

+0

爲什麼在您平移時調用drawRect?你不是在移動視圖嗎? – 2012-03-28 18:12:23

+0

不,pan修改我的「dataWindow」,它反映在drawRect中。視圖本身不會移動或縮放。 – samson 2012-03-28 20:17:34

+0

嗯,所以它是爲每個滾動增量重繪?這會減慢速度。我所看到的一個技巧是將數據渲染成圖像,並且只有在新數據到達時才從數據重繪,否則就是複合圖像。或者將你的數據視圖放到滾動視圖中,並且根本不重繪。當你到達它時發佈你的解決方案。 – 2012-03-28 21:04:23

回答

1

所以,最後,我最終把這些東西放在UIScrollView中。我不得不做很多工作來完成這個任務,複雜的部分是創建一系列PANES,這些PANES將被添加到滾動視圖中。每個窗格詢問委託人需要繪製的數據,然後將它們全部縫合在一起。幸運的是,一旦我將這些包含圖表窗格的滾動視圖放到表格視圖中,一切都很順利。仍然沒有解決縮放問題,但是我在這裏看到了一些應該使其相對簡單的帖子。

這就是我原來的問題的答案。不要試圖在每個框架上進行平移和繪製,它會波濤洶涌,並禁止一些真正的黑客攻擊,沒有什麼好辦法可以讓它平滑下來。滾動視圖爲您處理所有這些問題,只要您可以很好地分割您的視圖。我想我可以使用一個長視圖,但是當數據集變大時我有麻煩了。

但是現在我遇到了一個相關的問題 - 當屏幕外的圖表滾動到視圖(它們在UITableViewCells中)時,新圖表繪製時會出現大的呃逆。我想我會嘗試將它們異步繪製成圖像,以便當新行滾動查看時,我已經獲得了圖像。

+0

很高興你得到它的工作! – 2012-03-30 20:15:09

+0

你可以發佈一些代碼,或者請多解釋一下嗎?我正在做幾乎相同的事情,但我目前正在使用一個帶有CAShapeLayer的平移手勢識別器,在CAShapeLayer中我可以改變位置並在平移發生時修改路徑。不知道這是否是最佳做法,但工作順利。 現在的問題是如何找到新的最大值,因爲它很難改變'CGMutablePathRef'。然後還有很多其他問題。 – Majster 2014-07-28 06:42:55