2016-11-01 1 views
2

Je souhaite créer un conteneur ContainerView personnalisé avec des bords ombrés et arrondis. ContainerView est sous la forme d'un petit rectangle placé en haut d'un autre UIView. Dans cette situation particulière, ni les couches supplémentaires ni l'ombre du dessin utilisant CoreGraphics ne sont utiles.ContainerView avec ombre et bords arrondis

enter image description here

+2

Pourquoi pensez-vous que/les couches de vue supplémentaire ne sera pas utile? Est-ce que votre problème est que vous ne voyez pas l'ombre après avoir appliqué 'cornerRadius' à' containerView'? – alexburtnik

+0

Chaque fois que j'applique des vues/couches supplémentaires, l'ombre est visible et les bords sont arrondis, mais je ne peux pas me débarrasser de cette zone "blanche". –

+1

Vous devriez publier votre code afin d'obtenir de l'aide pour cela. – alexburtnik

Répondre

2

Vous avez tort que les vues/couches supplémentaires ne seront pas aider.

Vous pouvez placer roundedContainer avec des coins arrondis dans un autre shadowedView avec une ombre ajoutée à sa couche. Pour éviter ces coins blancs, assurez-vous de définir la couleur d'arrière-plan sur clear quelque part.

Exemple:

//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

Je l'ai déjà trouvé une solution appropriée. J'ai laissé tomber l'ombre à ContainerView qui est une super classe pour chaque UIView à l'intérieur. Puis, j'ai arrondi les bords en utilisant la classe UIViewController pour cette petite zone rectangle.

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

Ce n'est pas une super classe, c'est une vue d'ensemble. Ce n'est pas pareil. Votre réponse est essentiellement ce que je proposais. – alexburtnik

+0

Merci @alexburtnik pour l'aide. –