0

私は持っている:

[一連の if ステートメントは、backgroundImage を [UIImageNamed @"Background-Default-Landscape"] のようなものに設定します。デバイスが Retina ディスプレイの場合、Background-Default-Landscape@2x.png という名前のファイルを検索すると仮定してもよろしいですか?]

UIImageView *backgroundView = [[UIImageView alloc] initWithImage:backgroundImage];
CGRect containerRect = CGRectZero;
containerRect.size = [backgroundImage size];
UIView *containerView = [[UIView alloc] initWithFrame:containerRect];
[containerView addSubview:backgroundView];

現在、私のアプリは起動中で、ロードされると、指定された背景ではなく白い画面が表示されます (背景はどれも真っ白ではありません)。

コードのさらに下にある背景に物置き始める前に、背景を描画するために何が欠けていますか?

ありがとう、

- 編集 -

コードに関しては、次のものがあります。

- (void) renderScreen
{
    int height = [[UIScreen mainScreen] bounds].size.height;
    int width = [[UIScreen mainScreen] bounds].size.width;

    UIImage *backgroundImage = nil;

    if (height == 2048 || height == 2008 || height == 1024 || height == 1004 || height == 984)
    {
        backgroundImage = [UIImage imageNamed:@"Background-Default-Portrait"];
    }

    // Other such statements cut. 
    UIImageView *backgroundView = [[UIImageView alloc] initWithImage:backgroundImage];
    CGRect containerRect = CGRectZero;
    containerRect.size = [backgroundImage size];
    UIView *containerView = [[UIView alloc] initWithFrame:containerRect];

    [containerView addSubview:backgroundView];
    [self.view addSubview:containerView];

その下には、背景に描画するステートメントがあります。

このメソッドは、初期ビューがロードされたとき、および回転されたときに呼び出されます。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self renderScreen];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(renderScreen) name:UIDeviceOrientationDidChangeNotification object:nil];
}

動作は、正しい初期画面がロードされ、その後白にフェードアウトし、その後は何も興味深いことは起こらないようです。

- 編集 -

上部には、次のものがあります。

int height = [[UIScreen mainScreen] bounds].size.height;
int width = [[UIScreen mainScreen] bounds].size.width;

高さと幅を NSLog すると、Retina デバイスがランドスケープ モードの場合、高さは 1024、幅は 768 になります。表示される画像は、縦長の画像を回転させたものです。デバイスを横向きにすると、画像が画面全体にきれいに表示されますが、背景には水平方向に圧縮された画像が表示されます。

高さと幅を正しく取得するには、何か違うことをする必要がありますか? 横向きのデバイスの場合、高さは 768、幅は 1024 になると思います。

4

1 に答える 1

1

renderScreen が起動するたびに、現在のコントローラーのメイン ビューにさらに 2 つのサブビューが追加されます。

[containerView addSubview:backgroundView];
[self.view addSubview:containerView];

これは、デバイスを回転させるたびに発生します。

少なくとも、containerView をプロパティとして持ち、それを置き換えます。

@property (nonatomic, strong) UIView *containerView;

そして内部- (void) renderScreen

[self.containerView  removeFromSuperview];
self.containerView = [[UIView alloc] initWithFrame:containerRect];
[self.view addSubview:self.containerView];

以下を追加することもできます。

[self.view setNeedsDisplay];

ビューが再描画されるように。

于 2013-09-28T01:21:54.160 に答える