0

iPhone開発初心者です。iPhone シミュレーターを実行すると背景画像が範囲外になる Crystal Ball アプリのコードを書いています。私は実用的に物事をやろうとしています。以下はコードです

「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

Retina 以外のシミュレーターで実行できたことを嬉しく思います。そうしないと、問題に気付いていない可能性があります。

これが問題です:

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

網膜のことは、その歴史を知らないと理解するのが少し難しいです。

むかしむかし、Retina ディスプレイはありませんでした。あなたのファイル名は"crystal_ball copy.png"、この暗黒の時代にありました。その後、Retina が登場し、Apple はそれを開発者にとって可能な限り透過的で簡単なものにしようとしました。コードを何も変更していない場合、アプリは引き続き Retina デバイスで実行されますが、解像度を活用することはできません。2 倍の解像度のファイルを提供"@2x"し、ファイル名に追加しても、コードに何も変更を加えていない場合、システムは Retina デバイスでは高解像度画像を、非 Retina デバイスでは標準画像を自動的に取得します。

そのため、両方の解像度を提供し、1 つは あり"@2x"、もう 1 つはなしで、ファイル名を参照するときは"@2x". それでおしまい。この行はあなたの問題をここで修正します:

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

この画像ファイルが存在し、網膜以外の解像度を持っていると仮定します。

于 2013-03-10T08:49:53.993 に答える