1

我正在开发一个应用程序。我想将 uiview 背景设置为图像。图像大小为 1.6 mb。我遵循以下代码。

UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:image];

但与小尺寸图像相比,它需要更多时间。所以请帮助我如何加载 3mb 大小的图像,也像小尺寸图像一样。

4

2 回答 2

1

您可以在后台队列上执行绘图操作,因此不会冻结 UI:

CGRect imgRect = self.view.bounds;
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    UIGraphicsBeginImageContext(imgRect.size);
    [[UIImage imageNamed:@"image.png"] drawInRect:imgRect];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIColor* bgcolor = [UIColor colorWithPatternImage:image];
    dispatch_async(dispatch_get_main_queue(), ^{
        self.view.backgroundColor = bgcolor;
    });
});

还可以使用工具ImageOptim优化图像。

于 2013-04-26T08:19:36.027 回答
0

如果您resize image然后添加Application bundle以更快地执行,则最好。

这里我认为首先是no needfor s in 。imageresizingUIViewpattern imagebackground

你可以solve memory issue这样:

 NSString *imgfile = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];
 UIImage *currentImage = [UIImage imageWithContentsOfFile:imgfile];
 self.view.backgroundColor = [UIColor colorWithPatternImage:currentImage];

请参阅ios-imagenamed-vs-imagewithcontentsofffile链接。

编辑:使用@phix23 答案以获得流畅的 UI

于 2013-04-26T08:30:26.380 回答