0

向きを変えたら、ビューコントローラーの背景画像を変えたいのですが。次のように、shouldAutorotateToInterfaceOrientationでsetupGUIForOrientation関数を呼び出します。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    [self setupGUIForOrientation:interfaceOrientation];
    return YES;
}

setupGUIForOrientation関数:

-(void)setupGUIForOrientation:(UIInterfaceOrientation)orientation
{
    if(!background) background = [[UIImageView alloc] init];
    UIImage* image = [[StorageProvider storage].imageProvider getImageForSurfaceElement:@"background"];
    int width = 0;
    int height = 0;
    CGRect bounds = [[UIScreen mainScreen] bounds];
    if(UIInterfaceOrientationIsPortrait(orientation)) {
        width = MIN(bounds.size.width, bounds.size.height);
        height = MAX(bounds.size.width, bounds.size.height);
    } else {
        width = MAX(bounds.size.width, bounds.size.height);
        height = MIN(bounds.size.width, bounds.size.height);
    }
    background.frame = CGRectMake(0, 0, width, height);
    [self.view addSubview: background];
    [self.view sendSubviewToBack: background];
    [background setImage:image];
}

1つを除いて、すべてが良好です(画像とフレームが変更されます)。回転が発生すると、ビューコントローラーの背景色が1秒間表示されますが、これは非常に醜いです。なんとか防げますか?そして、この関数をより良い方法でコーディングできますか?助けてくれてありがとう!

4

1 に答える 1

1

推測ですが、ビューの更新が早す​​ぎる可能性があります。でメソッドを呼び出すのではなく、でshouldAutorotateToInterfaceOrientation実行してみましたdidRotateFromInterfaceOrientationか?

つまり、この変更を行います。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [self setupGUIForOrientation:self.interfaceOrientation];
}
于 2012-04-13T14:18:30.543 に答える