1

私は以下の方法で影を付けようとUIImageviewしています:

imageView.layer.shadowColor = [UIColor purpleColor].CGColor;
imageView.layer.shadowOffset = CGSizeMake(0, 1);
imageView.layer.shadowOpacity = 1;
imageView.layer.shadowRadius = 1.0;
imageView.clipsToBounds = NO;

しかし、UIImageviewクリアカラーの影のように画像や背景色がない場合は表示されません。透明な画像を入れようとしましたが、それでも表示されませんでした。助けてください。

4

2 に答える 2

5

画像ビューに何も含まれていない場合、影を作成するものは何もありません。この場合にできることは、画像の内容を使用するのではなく、明示的なシャドウ rect を定義することです。

CGPathRef shadowPath = CGPathCreateWithRect(imageView.bounds, NULL);
imageView.layer.shadowPath = shadowPath;
CGPathRelease(shadowPath);

実際、一般的に影を追加する場合、この手法を使用するとパフォーマンスが大幅に向上します。これは、影をレイヤーのコンテンツから動的に計算する必要がないためです。たとえば、この手法を使用して、スクロールのパフォーマンスを向上させることができます。Apple は、WWDC ビデオの 1 つでこれについて言及しています。

于 2013-04-12T12:30:58.847 に答える
0

画像のない影が必要な場合は、 のMike Weller's解決策に進みexplicit shadow rectます。正直に言うと、その答えは私のものよりも好きですが、代わりにに設定maskToBOundsして、のようNOに追加してみてください。shadowPath

 // Set your basic shadow properties.
 imageView.layer.shadowColor = [[UIColor purpleColor] CGColor];
 imageView.layer.shadowOpacity = 1.0f;
 imageView.layer.shadowOffset = CGSizeMake(0, 1.0f);
 imageView.layer.shadowRadius = 1.0;

 // Unmask from bounds
 imageView.layer.masksToBounds = NO;

 // Create a UIBezierPath
 UIBezierPath *path = [UIBezierPath bezierPathWithRect:imageView.bounds];

 // Set the UIBezierPath (path) to the shadowPath
 imageView.layer.shadowPath = [path CGPath];

これは、多くのもので使用するとパフォーマンスに影響を与える可能性があることに注意してください。

しかし、私が言うように、私はMike Weller'sソリューションが好きです。私はそれがとても好きなので、自分でコードを変更するかもしれません。私は代替手段を提供しているだけです。

于 2013-04-12T12:46:31.303 に答える