使用UIImageView设置背景图像的问题

时间:2012-11-11 04:36:51

标签: iphone objective-c ios xcode uiimageview

在我的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的问题: 当我通过这种方式设置图像时,我必须处理不同大小的屏幕的图像缩放问题。我使用以下代码进行scalling:

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的尺寸?

2 个答案:

答案 0 :(得分:0)

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

在呈现secondViewController之前,请记录它:

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

我敢打赌一美元,这是零。如果我是对的,那么让我们来看看你如何初始化secondViewController。这是问题,与背景图像视图无关。

答案 1 :(得分:0)

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

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

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

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

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