在我的FirstViewController
中,如果设备是iPhone4或iPhone5,我已经为交换机后台编写了此代码:
文件名:
bg-for5-568@2x.png
bg-for4@2x.png
BG-for4.png
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage *backgroundImage = [[UIImage alloc] init];
if([[UIScreen mainScreen]bounds].size.height == 568)
{
backgroundImage = [UIImage imageNamed:@"bg-for5-568h"];
}
else
{
backgroundImage = [UIImage imageNamed:@"bg-for4"];
}
self.view.backgroundColor = [[[UIColor alloc] initWithPatternImage:backgroundImage] autorelease];
[backgroundImage release];
}
当我在我的模拟器上抓住应用程序时,iphone5的背景在视图外显示双倍大小。
/ *谢谢你* /
答案 0 :(得分:5)
我不确定这是否是这个问题的解决方案,因为我错过了一些信息,但是:
首先:从.png
方法中删除imageNamed:
。从iOS4开始,你不应再这样做了。接下来是:你的形象名称是什么?请注意,iPhone5具有视网膜显示屏,您的图像应命名为bg-for5-568h@2x.png
,但在源代码中称为bg-for5-568h
。
除此之外:几乎在你的图像不是照片的每一种情况下,你所做的都是一个坏主意。即使它是一张照片,也只需使用iPhone 4和4S的更大图像。它不是那么大,所以内存占用不是问题!查看UIImageView
的{{1}}媒体资源。您可以使用它来调整较大图像的位置。如果图像不是全屏,您还可以检查contentMode
s UIImageView
属性以剪切图像。
相信我,在我的公司里,我们有一些像@ ipad,~iphone,~2x甚至可伸缩图像这样的东西的钩子。所有这些钩子工作正常,直到约会,苹果公布了类似的东西或简单的新设备。所以我决定不再做这种钩子了。它们在一开始似乎非常有用,但是当市场上出现新的东西时你遇到的麻烦是不值得的!
答案 1 :(得分:2)
您应该为所有视网膜图像添加@ 2x后缀。 在您的情况下,您的图像应存储为“bg-for5-568h@2x.png”。 希望它能解决这个问题。
答案 2 :(得分:1)
我不建议这样做,如果Apple再次更改屏幕大小并且你必须返回并重写所有代码该怎么办?
一个简单的解决方法是使用:
self.view.backgroundColor = [UIColor colorWithPatternImage:/* your image*/];
这可能会给你拉伸或平铺的一些问题。
我更喜欢使用
UIImage* imageName = [[UIImage imageNamed:/*image name*/]resizableImageWithCapInsets:UIEdgeInsetsMake(top,left,bottom,right)];
在iOS 6中,您可以通过定义是希望图像拉伸还是平铺来进一步改进。这允许您创建一个不会改变的边框,然后默认情况下将图像的中心平铺并填充图像视图的空间