为什么在uiviews上设置backgroundImage会降低我的iOS应用程序速度?

时间:2015-05-20 15:49:30

标签: ios objective-c

我正在制作一款包含2个UITableViewController的iOS应用, 按第一个 tableview单元格推送第二个表格视图, 转换 非常快(在/之间往返)两个tableviews)直到我在每个tableviews上使用此代码viewWillAppear方法:

UIImageView *imageV = [[UIImageView alloc] init];
UIImage *image = [[UIImage imageNamed:@"un.jpeg"] applyBlurWithRadius:50
                                                            tintColor:nil
                                                saturationDeltaFactor:1 
                                                            maskImage:nil];
imageV.image = image;
self.tableView.backgroundView = imageV;

现在转换大约需要2-3秒才能完成转换速度?

编辑1:使用Apple的UIImage + ImageEffects.h来模糊图像

编辑2(解决方案):

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    UIImageView *imageV = [[UIImageView alloc] init];
    UIImage *image = [[UIImage imageNamed:@"un.jpeg"] applyBlurWithRadius:50
                                                                tintColor:nil
                                                    saturationDeltaFactor:1
                                                                maskImage:nil];
    imageV.image = image;
    self.tableView.backgroundView = imageV;
});

3 个答案:

答案 0 :(得分:1)

最让你的应用速度减慢的当然不是图像,而是适用于它的模糊。

答案 1 :(得分:1)

我建议在后台线程上应用模糊,这样就不会减慢界面速度。您可能希望了解GPUImage以获得最大速度。

或者,在iOS 8中,只使用内置的UIBlurEffect。但当然这是一种不那么灵活的模糊。

答案 2 :(得分:0)

不设置图像本身,正在应用模糊。
图像越大,所需的时间越长。我不知道您使用哪种功能来模糊图像,但检查您是否可以使用GPU上的加速框架或核心图像来更快地执行操作。