2016-08-19 61 views
0

我正在研究一個基本上覆蓋整個屏幕的自定義繪製的UIView的iPad應用程序。它是一個音頻應用程序,它具有VU計量表,它可以通過以太網約30秒鐘獲得更新消息,然後告訴UI重新繪製屏幕上的VU計量表。處理多個/頻繁調用UIView needsDisplayInRect高效

我遇到的問題是在視圖中有不同位置有16個VU表,我最終每秒調用needsDisplayInRect每秒30次。如果我在drawRect函數中完成所有繪圖,那麼它可以工作,但是它非常緩慢,因爲CGRect傳遞到drawRect幾乎是整個屏幕。

在OSX版本中有NSViewgetRectsBeingDrawn函數,它給了我一個顯着提高重繪性能的途徑。不過,據我所知,iOS中沒有相應的功能。

我已經試過存儲,我已經叫那麼CGRects只重繪他們drawRect,但事實證明,經常的iOS決定重繪CGRects已經有呼籲他們needsDisplayInRect之間的區域,所以我結束了我還沒有請求重繪的區域上的大白色矩形(儘管我確實獲得了我期待的性能改進)。這裏的問題是,我看不到一種方法來獲取實際上正在重繪的rects,只是將rect傳遞到drawRect中,這實質上是所有正在重繪的rects的聯合。

那麼,有沒有其他的方法來加快頻繁重繪我錯過的UIView的小區域?

回答

1

最簡單的解決方案几乎可以肯定地爲每個VU表做一個子視圖。據推測,你只需要一個VUMeterView課程並製作16個實例。