我建立一个摄谱仪想知道我怎么能提高我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