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
Répondre
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)
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()
}
}
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
Merci @alexburtnik pour l'aide. –
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
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". –
Vous devriez publier votre code afin d'obtenir de l'aide pour cela. – alexburtnik