2017-01-05 9 views
3

角を丸くして、ある程度深みを持たせるために影をつけたImageViewを作成しようとしています。 UIImageViewのシャドウを作成することはできましたが、コーナーを丸くするようにコードを追加するたびに、シャドーなしの角が丸くなりました。私はIBOutletという名前のmyImageを持っていて、それはviewDidLoadの機能の中にあります。誰もそれを動作させる方法に関するアイデアはありますか?私は間違って何をしていますか?角が丸いUIImageViewの影を作成しますか?

override func viewDidLoad() { 
    super.ViewDidLoad() 
    myImage.layer.shadowColor = UIColor.black.cgColor 
    myImage.layer.shadowOpacity = 1 
    myImage.layer.shadowOffset = CGSize.zero 
    myImage.layer.shadowRadius = 10 
    myImage.layer.shadowPath = UIBezierPath(rect: myImage.bounds).cgPath 
    myImage.layer.shouldRasterize = false 
    myImage.layer.cornerRadius = 10 
    myImage.clipsToBounds = true 
} 
+0

outerView.addSubview(myImage) 

結果は次のようになります。 –

+0

'myImage'を境界線を切り抜いていない別のビューの中に入れ、そのビューに影を適用することをお勧めします。 –

+0

それでは、clipsToBounds = falseを設定するだけですか? –

答えて

26

あなたはtrueclipsToBoundsを設定した場合、これは角を丸めるが、登場から影を防ぐことができます。これを解決するには、2つのビューを作成することができます。コンテナビューには影があり、そのサブビューには角が丸くなります。

コンテナビューには、clipsToBoundsfalseに設定され、シャドウプロパティが適用されています。影を丸くしたい場合は、roundedRectcornerRadiusを取るUIBezierPathコンストラクタを使用してください。

let outerView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
outerView.clipsToBounds = false 
outerView.layer.shadowColor = UIColor.black.cgColor 
outerView.layer.shadowOpacity = 1 
outerView.layer.shadowOffset = CGSize.zero 
outerView.layer.shadowRadius = 10 
outerView.layer.shadowPath = UIBezierPath(roundedRect: outerView.bounds, cornerRadius: 10).cgPath 

次に、コンテナビューの同じ大きさに画像ビュー(またはUIViewの任意の他のタイプ)を設定trueclipsToBoundsを設定し、それにcornerRadiusを与えます。

let myImage = UIImageView(frame: outerView.bounds) 
myImage.clipsToBounds = true 
myImage.layer.cornerRadius = 10 

最後に、イメージビューをコンテナビューのサブビューにすることを忘れないでください。あなたが境界を越えて行く影を見ることができないだろうに `true` clipsToBoundsの=を設定した場合

enter image description here

+0

私はそれを試しましたが、今は影がありますが、 'clipsToBounds = false'を設定するたびにuiImageViewは丸められません。 –

+0

正しいです、私の答えが更新されました。 – nathan

+1

ありがとうございます! –

関連する問題