0

私のビューの1つで、ビューに影を追加しています。影は左端と右端に白いスペースを示しているということです。これらのスペースを削除したいと思います。

これが私のコードです:

UIView *myView = [[ISTView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 35)];
myView.backgroundColor = [UIColor greyColor];
[myView.layer setShadowOffset:CGSizeMake(0.0, 5.0)];
[myView.layer setShadowOpacity:0.8];
[myView.layer setShadowRadius:2.0];
[myView.layer setShadowColor:[UIColor blackColor].CGColor];
[self.view addSubview:myView];
[myView release];

これが私の見解のo/pです:

ここに画像の説明を入力してください

4

4 に答える 4

2

副作用のない均一なシャドウが必要な場合は、グラフィックエディタで描画し、pngに保存して、ストレッチ可能な画像を含むUIImageViewをビューに配置します。また、clipToBoundsをNOに設定することを忘れないでください。

UIView *myView = [[ISTView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 35)];
myView.backgroundColor = [UIColor greyColor];
myView.clipToBounds = NO;

UIImageView *shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 35, 320, 10)];
shadowView.image = [UIImage imageWithName:@"my-shadow.png"];
[myView addSubview:shadowView];
[shadowView release];

[self.view addSubview:myView];
[myView release];

システムがビュー階層の上にキャッシュされた既存の画像を描画する方が、レイヤーの影を計算するよりも安価です。

于 2011-05-18T08:55:15.997 に答える
1

shadowPathを使用して、シャドウをビューよりも大きくします

view.layer.shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, view.frame.size.width+30, view.frame.size.height)].CGPath;
于 2011-05-18T08:17:43.907 に答える
0

私が考えて機能している解決策の1つは、ビューのフレームをXの位置と幅で2ピクセル調整することです。

UIView *myView = [[ISTView alloc] initWithFrame:CGRectMake(-2.0, 0.0, 324.0, 35)];

しかし、これはこれを行うためのよりクリーンなアプローチではありません。誰かがより良い解決策を持っているなら、ガイドしてください。

于 2011-05-18T08:11:19.033 に答える
0

これを試して、コードを削除してください: [myView.layer setShadowRadius:2.0];

于 2014-02-24T07:21:27.653 に答える