0

在我的 iPhone 应用程序上,我只想设置一个特定的背景图像,这取决于它是否是 iPhone 5。

所以,我尝试了两种方法:A)使用

self.view.backgroundColor = [UIColor colorWithPatternImage:backGroundimage];

B)创建一个 UIImageView 并在那里设置图像。代码:

UIImageView *backgroundImageView = [[UIImageView alloc]initWithFrame:screenBounds];
[backgroundImageView setImage:[UIImage imageNamed:backGroundImage]];
[self.view addSubview:backgroundImageView];

但我对他们两个都有问题:

步骤 A 的问题:当我通过这种方式设置图像时,我必须处理不同屏幕尺寸的图像缩放问题。我使用以下代码进行缩放:

UIGraphicsBeginImageContext(screenBounds.size);
[[UIImage imageNamed:backGroundImage] drawInRect:screenBounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); 

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

步骤 A 的另一个问题是图像看起来很模糊。它没有相同的锐度。

步骤 B 的问题:有了这个,图像看起来非常清晰和锐利 - 就像它应该看起来的那样。

但是当我使用以下代码切换到另一个视图时,奇怪的是 UIImageView backgroundImageView 仍然出现在第二个视图上。我用来切换视图的代码是:

[self presentViewController:secondViewController animated:YES completion:nil];

我什至尝试过[backgroundImageView removeFromSuperview],但这也没有解决任何问题。

那么我做错了什么?以及如何将图片设置为取决于 iphone 大小的背景?

4

2 回答 2

0

B计划是个好计划。呈现另一个视图控制器应该并且肯定会隐藏您的图像视图。如果它没有发生,那么它是创建 secondViewController 的问题,与当前 VC 上的背景图像无关。

在呈现 secondViewController 之前,记录它:

NSLog(@"presenting %@", secondViewController);

我赌一美元,它是零。如果我是对的,让我们看看如何初始化 secondViewController。这就是问题所在,与背景图像视图无关。

于 2012-11-11T05:25:33.953 回答
0

好的,我终于解决了这个问题,虽然这个问题的原因仍然让我感到困惑。

为了解决这个问题,我必须为 UIImageView 创建一个 IBOutlet 属性并将其连接到 XIB 文件上。

我以编程方式创建 UIImageView 的原因是 UIImageView 的大小取决于他们使用的 iPhone 大小。但是对于 IBOutlet(我们称之为 UIImageViewOutlet,我只是使用 [self.UIImageViewOutlet setFrame:] 来获得我想要的大小和位置。

我还发现我以编程方式创建的按钮之一在 secondViewController 中仍然可见。我最终在 XIB 文件上也为该文件创建了一个 Outlet,并在其上使用了 setFrame 来正确定位它。

如果有人知道这个问题的原因,我将非常感激。

于 2012-11-11T13:12:11.660 回答