iOS模拟器中的超出界限的图像

时间:2013-03-10 07:16:32

标签: iphone ios objective-c xcode

我是iPhone开发的新手。我正在为Crystal Ball App编写代码,当我运行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

2 个答案:

答案 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"];

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