0

ヘッダーとして使用している UIView があり、このビューにドロップ シャドウを適用しました。意図したとおりに画面に表示されますが、回転後、影はそれ自体の上に再描画されたかのように 2 倍の暗さになります。その後の回転により、さらに暗くなります。ヘッダーとシャドウのコードは次のとおりです。

self.header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, HEADER_HEIGHT)];
self.header.backgroundColor = [UIColor whiteColor];
self.header.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;

// Drop shadow.
self.header.layer.shadowColor = [UIColor blackColor].CGColor;
self.header.layer.shadowOpacity = 0.5;
self.header.layer.shadowRadius = 2.0;
self.header.layer.shadowOffset = CGSizeMake(0, 2);
//        self.header.layer.shouldRasterize = YES;
//        self.header.layer.rasterizationScale = [UIScreen mainScreen].scale;

このコードはすべて、View Controller の viewWillLayoutSubviews で発生し、メソッドの先頭で [super willLayoutSubviews] を呼び出します。同じコードを viewWillAppear:animated に入れてみましたが、効果がありません。

4

1 に答える 1

1

この質問を書きながら、解決策を見つけました。viewWillLayout サブビューが呼び出されるたびにヘッダーを再初期化していました。非効率であるだけでなく、これは何らかの理由で影が自分自身の上に描画される原因にもなりました。loadView ですべてのビューを初期化し、viewWillLayoutSubviews でフレーム設定を行うことで、これを修正しました。これで問題は解決し、既に存在するオブジェクトを再初期化していないため、より良いものになりました。

于 2013-04-11T15:47:25.790 に答える