0

我是 iPhone 开发的新手。我正在为 Crystal Ball 应用程序编写代码,当我运行 iPhone 模拟器时,其中的背景图像超出了范围。我正在努力务实地做事。以下是代码

导入“ViewController.h”

@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
4

2 回答 2

1

您应该创建没有“@2x”的图像。iOS 已经处理好了。

UIImage *image = [UIImage imageNamed: @"crystal_ball copy.png"];
于 2013-03-10T07:39:02.440 回答
0

很高兴您在非视网膜模拟器上运行它。否则你可能没有注意到这个问题。

这是问题:

UIImage *image = [UIImage imageNamed: @"crystal_ball copy@2x.png"];

当你不知道它的历史时,视网膜的东西有点难以理解:

曾几何时,没有视网膜显示器。你的文件名只是"crystal_ball copy.png"在这些黑暗的日子里。然后 Retina 出现了,Apple 试图让它对开发人员尽可能透明和容易。如果您没有对代码进行任何更改,那么该应用程序仍应在视网膜设备上运行,但不会利用分辨率。如果您提供了一个具有双分辨率的文件并添加"@2x"到文件名,但仍然没有对您的代码进行任何更改,那么系统将自动获取 Retina 设备上的高分辨率图像和非 Retina 设备上的标准图像。

因此,提供两种分辨率,一种带有"@2x",一种没有,并且在引用文件名时省略"@2x". 而已。此行将在这里解决您的问题:

UIImage *image = [UIImage imageNamed: @"crystal_ball copy.png"];

假设此图像文件存在并且确实具有非视网膜分辨率。

于 2013-03-10T08:49:53.993 回答