2

カスタム テーブルビュー セルで、次のような影のある単純な四角形を描画しています。

photoBorder = [[[UIView alloc] initWithFrame:CGRectMake(4, 4, self.frame.size.width-8, 190)] autorelease];
photoBorder.autoresizingMask = UIViewAutoresizingFlexibleWidth;
photoBorder.backgroundColor = [UIColor whiteColor];
photoBorder.layer.masksToBounds = NO;
photoBorder.layer.shadowOffset = CGSizeMake(0, 1);
photoBorder.layer.shadowRadius = 4;
photoBorder.layer.shadowOpacity = 1.0;
photoBorder.layer.shadowColor = [UIColor darkGrayColor].CGColor;
photoBorder.layer.shouldRasterize = YES;
photoBorder.layer.shadowPath = [UIBezierPath bezierPathWithRect:photoBorder.bounds].CGPath; // this line seems to be causing the problem

これは、ビューが最初に読み込まれたときに正常に機能します。ただし、デバイスを回転させても、影は同じサイズのままです。「photoBorder」の新しい幅まで伸ばしてほしいです。

shadowPath を削除することで動作させることができますが、tableview のパフォーマンスが大幅に低下します。

UIView で、パフォーマンスを損なうことなく引き伸ばすことができる影を作成するためのヒントはありますか?

4

3 に答える 3

6

数時間検索しても何も見つからなかったので、投稿しました。それから数分後に答えを見つけました。

私にとっての簡単な解決策は、shadowPathをlayoutSubviewsに移動するだけのようです。

- (void)layoutSubviews{
    photoBorder.layer.shadowPath = [UIBezierPath bezierPathWithRect:photoBorder.bounds].CGPath;
}
于 2012-11-13T19:09:34.010 に答える
0

パフォーマンスを向上させるために、Core Graphics を使用して内側の影を描くことができます。

UIViewレイヤーのインナーシャドウ効果

于 2012-11-13T19:05:21.840 に答える