我是iPhone开发的新手。我正在为Crystal Ball App编写代码,当我运行iPhone模拟器时,背景图像越界。 我正在尝试务实地做事。 以下是代码
@interface ViewController ()
@end
@implementation ViewController
@synthesize predictionLabel;
@synthesize predictionArray;
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage *image = [UIImage imageNamed: @"crystal_ball copy@2x.png"];
UIImageView *imageView =[[UIImageView alloc] initWithImage:image];
[self. view insertSubview:imageView atIndex:0];
self.predictionArray = [[NSArray alloc] initWithObjects:@"It is decideley so",
@"good things coming",
@"Good time is here",
@"Great profit",
@"stay possitive",@"Stay Foccused",@"all is well",nil];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[self setPredictionLabel:nil];
[self setPredictionLabel:nil];
[self setPredictionLabel:nil];
[self setPredictionLabel:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (IBAction)buttonPressed:(UIButton *)sender {
NSUInteger index = arc4random_uniform(self.predictionArray. count);
self.predictionLabel.text = [self.predictionArray objectAtIndex: index];
}
@end
答案 0 :(得分:1)
您应该创建没有“@ 2x”的图像。 iOS已经处理它了。
UIImage *image = [UIImage imageNamed: @"crystal_ball copy.png"];
答案 1 :(得分:0)
很高兴您在非视网膜模拟器上运行它。否则你可能没有注意到这个问题。
这就是问题所在:
UIImage *image = [UIImage imageNamed: @"crystal_ball copy@2x.png"];
当你不知道它的历史时,视网膜有点难以理解:
曾几何时没有视网膜显示。在这些黑暗的日子里,你的文件名只是"crystal_ball copy.png"
。然后视网膜来了,Apple试图让它尽可能透明,易于开发。
如果您没有对代码进行任何更改,那么该应用仍应在视网膜设备上运行,但不会从分辨率中获益。如果您提供的文件具有双倍分辨率并且在文件名中添加"@2x"
但仍然没有更改代码,那么系统将自动获取视网膜设备上的高分辨率图像和非文件图像-retina设备。
因此提供两种解决方案,一种是"@2x"
,另一种是没有,当提到文件名时省略"@2x"
。而已。这一行将解决您的问题:
UIImage *image = [UIImage imageNamed: @"crystal_ball copy.png"];
假设此图像文件存在并且确实具有非视网膜分辨率。