0

このチュートリアルを使用して、アプリのグラデーション背景を作成しました。きれいそう。ただし、向きを変えると問題が発生します。

縦向きモードでは適切に見えますが、横向きではグラデーションがビュー全体をカバーしていません。スクリーンショットをアップロードしました -

http://www.screencast.com/t/c4vUv55Xq0

赤はグラデーションで、青の部分はデフォルトの背景色で、赤のグラデーションで完全に覆われているはずです。

ビュー全体をカバーするにはどうすればよいですか? 回転の変化を検出した後、グラデーションメソッドを呼び出そうとしましたが、うまくいきませんでした。これは私が使用したコードです:

    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(deviceOrientationDidChangeNotification:)
     name:UIDeviceOrientationDidChangeNotification
     object:nil];// this is in 'viewWillAppear' method


- (void)deviceOrientationDidChangeNotification:(NSNotification*)note
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    [self addBackground];
}
4

1 に答える 1

3

私の推測では、ランドスケープ レイアウトのビュー階層を実際に更新するUIDeviceOrientationDidChangeNotification 前に、システムが送信します。

に応じてグラデーションをやり直すのではなくUIDeviceOrientationDidChangeNotification、 で行いviewDidLayoutSubviewsます。ビュー コントローラーが を受け取るviewDidLayoutSubviewsと、そのビューのフレームは新しいインターフェイスの向きに合わせて既に変更されています。このようなことをする必要があります:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.background.frame = self.view.bounds;
}
于 2013-06-23T06:45:34.473 に答える