2016-11-01 28 views
2

シャドーエッジと丸みを帯びたエッジでカスタムContainerViewを作成したいと思います。このContainerViewは、別のUIViewの上部に配置された小さな四角形の形式です。この特殊な状況では、CoreGraphicsを使用した追加レイヤーや描画シャドウは役に立ちません。シャドウと丸いエッジを持つContainerView

enter image description here

+2

?あなたの問題は 'cornerRadius'を' containerView'に適用した後に影が見えないのですか? – alexburtnik

+0

追加のビュー/レイヤーを適用するたびに、影が表示され、エッジが丸くなりますが、この「白い」領域を取り除くことはできません。 –

+1

あなたのコードを投稿して助けてください。 – alexburtnik

答えて

2

あなたは追加のビュー/層が助けにはなりませんことを間違っています。

角に丸みを付けてroundedContainerを追加し、別のレイヤーに影を付けてshadowedViewに追加できます。 これらの白い角を避けるには、背景色をclearのどこかに設定してください。

例:

//superview for container with rounded corners 
shadowedView.backgroundColor = UIColor.clear //this will fix your white corners issue 
shadowedView.layer.shadowColor = UIColor.black.cgColor 
shadowedView.layer.shadowOffset = .zero 
shadowedView.layer.shadowOpacity = 0.3 
shadowedView.layer.shadowRadius = 5.0 

//add a container with rounded corners 
let roundedView = UIView() 
roundedView.frame = baseView.bounds 
roundedView.layer.cornerRadius = 10 
roundedView.layer.masksToBounds = true 
shadowedView.addSubview(roundedView) 
0

私はすでに適切な解決策を発見しました。私はすべてのUIViewのスーパークラスであるContainerViewに影を落としました。私はUIViewControllerクラスを使ってこの小さな矩形領域の端を丸めました。あなたは追加のビューの/層は助けないということだと思いますなぜ

class GraphViewController: UIViewController { 

@IBOutlet var graphView: GraphViewRenderer! 

override func viewDidLoad() { 
    graphView.layer.cornerRadius = 20.0 
    graphView.layer.masksToBounds = true 

    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

class GraphContainerView: UIView { 

func applyPlainShadow() { 
    layer.shadowColor = UIColor.black.cgColor 
    layer.shadowOffset = CGSize.zero 
    layer.shadowRadius = 5.0 
    layer.shadowOpacity = 0.7 
} 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    applyPlainShadow() 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    applyPlainShadow() 
} 

}

+0

スーパークラスではなく、スーパービューです。それは同じではありません。あなたの答えは、基本的に私が示唆していたものです。 – alexburtnik

+0

@alexburtnikありがとうございました。 –

関連する問題