2012-08-02 155 views
4

我正在開發一個iOS項目,與視頻流相關。 UI中的一個控件是MPVolumeView。問題是,當我滑動控制更改音量,它似乎使用多CPU。事實上,當我使用滑塊時UI變慢。如何提高性能?也許我做錯了什麼?從儀器CPU負載如何提高MPVolumeView性能?

Reference image for CPU Load from Instruments. In the left only streaming, the peaks in the right were streaming+volume slide.

參考圖像。在只有左側的流媒體中,右側的峯值是流媒體+音量幻燈片。

謝謝。

編輯:

這是如何我添加控件一個觀點:

MPVolumeView *mpVolume = [[MPVolumeView alloc] initWithFrame:CGRectMake(32, 
                     56, 
                     160, 
                     9)]; 
[self addSubview:mpVolume]; 
[mpVolume release]; 

「自我」是一個自定義視圖,從UIView的繼承,但我不使用XIB和drawRect中。我只是在「initWithFrame:frame」方法中添加所有控件。

+0

爲了讓我們能夠回答您的問題,您需要添加更多信息。現在沒有足夠的細節包括任何人做比猜想更:) – Dustin 2012-08-02 14:32:16

+0

@Dustin我添加了一些信息。 – LuisEspinoza 2012-08-02 14:39:09

+0

你的MPVolumeView的目標行動是什麼?有一個公平的機會,問題在於媒體播放代碼的敏感部分經常更改音量,而不是用戶界面本身。 – LodeRunner 2012-08-02 14:55:26

回答

0

觀察調用init的次數。有時候我看到它不止一次地被調用,有時候會根據情況而被調用。您可能只想在首次設置視圖時僅分配卷視圖。這聽起來像它可能會一次又一次地設置音量視圖。

一個可能是使體積initWithFrame查看類屬性(私有或公共)

@property (nonatomic, retain) MPVolumeView *mpVolume; 

那當然...... @synthesize mpVolume = _mpVolume

然後,只需檢查,看看如果它是零,然後ALLOC

if(_mpVolume == nil){ 
     _mpVolume = [[MPVolumeView alloc] initWithFrame:CGRectMake(32,56,160,9)]; 
     [self addSubview:_mpVolume]; 
} 

然後在dealloc中

釋放mpVolume 10
+0

經過測試,但問題仍然存在.. – LuisEspinoza 2012-08-02 15:22:19

+0

好的...: - /另一個想法是該視圖檢查airplay設備並顯示airplay按鈕(如果存在)。您是否嘗試過在飛行模式下進行相同的CPU測試?我知道使用飛行模式不是一個解決方案,但它會幫助你知道它是否是一個播放問題 – 2012-08-02 15:30:21

+0

已測試,但問題仍然存在..,它似乎更好,但還不夠 – LuisEspinoza 2012-08-02 16:59:01