我建立一個攝譜儀想知道我怎麼能提高我UIView
基於代碼的性能。我知道我無法從後臺線程更新iPhone/iPad的用戶界面,所以我正在使用GCD進行大部分處理。我遇到的問題是我的界面仍然更新太慢。使用後臺更新接口更快的方式線程
使用下面的代碼,我試圖採取32個堆疊的4x4像素UIView
s並更改其背景顏色(請參閱附加圖像上的綠色方塊)。該操作會爲其他用戶界面產生可見的滯後。
有沒有一種方法可以讓我「準備」這些從某種後臺線程的顏色,然後問主線程刷新界面一下子?
//create a color intensity map used to color pixels
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
colorMap = [[NSMutableDictionary alloc] initWithCapacity:128];
for(int i = 0; i<128; i ++)
{
[colorMap setObject:[UIColor colorWithHue:0.2 saturation:1 brightness:i/128.0 alpha:1] forKey:[NSNumber numberWithInt:i]];
}
});
-(void)updateLayoutFromMainThread:(id)sender
{
for(UIView* tempView in self.markerViews)
{
tempView.backgroundColor =[colorMap objectForKey:[NSNumber numberWithInt:arc4random()%128]];
}
}
//called from background, would do heavy processing and fourier transforms
-(void)updateLayout
{
//update the interface from the main thread
[self performSelectorOnMainThread:@selector(updateLayoutFromMainThread:) withObject:nil waitUntilDone:NO];
}
我結束了預先計算的256個色的字典,然後問字典基於該圓正試圖顯示該值的顏色。嘗試在飛行中分配顏色是瓶頸。
所以你基準測試您的應用程序,這竟然是瓶頸,對不對? – 2013-05-11 11:23:19
您表示您的視圖已堆疊。你的意思是隻有其中一個是可見的?如果是的話,該解決方案可能會推遲對除了下一個視圖以外的不可見視圖的所有操作(或者如果您的用戶可以通過各個視圖快速切換,那麼接下來的幾個視圖)。 WWDC 2012有一個視頻,涉及構建併發用戶界面。 – Paul 2013-05-11 13:36:53
非常多我有256列每個有32個UIViews(4px乘4px)。通過堆疊我的意思是它們以4個像素爲增量佔用128個像素。每200ms左右我想做快速傅立葉變換,並使用這些視圖對產生的頻率進行顏色編碼(簡單地改變它們的背景顏色)。 – 2013-05-11 15:53:30