Comment puis-je reproduire cette observation? Mon problème, que si j'utilise High Alpha Color ou ClearColor, il n'y a pas d'ombre portée, si j'utilise une couleur alpha basse, je ne peux pas voir l'ombre portée sous la plaque. Comme le niveau du volume change (pièce colorée), l'ombre bouge également, ce n'est donc pas pur Photoshop. P>
p>
5 Réponses :
Vous aurez deux images que l'une est l'image colorée et l'autre sera l'ombre de celui-ci L'ombre augmentera et augmentera de largeur avec l'expansion de la partie colorée p>
Il n'y a pas de manière native de faire ce que vous demandez, p>
Essayez quelque chose en utilisant ces propriétés de votre vue. Cela pourrait se retrouver avec quelque chose il fuit à la manière de la libération de CGPath (rect) à la fin désolé. p> p>
Cela ne fonctionne pas lorsque la vue est transparente - alpha 0
J'ai utilisé un UIImageView pour fournir l'ombre. J'ai créé une image de 1 pixel de large, de 12 pixels hauts. L'image était noire, mais l'alpha était un gradient de 0,5 en haut à 0,0 au bas, par exemple. RGBA 1.0,1.0,1.0.5 -> 1.0,1.0,1.0,0,0 - J'ai ensuite placé l'UIImageView juste en dessous de la vue ayant besoin de l'ombre et l'étirée horizontalement sur la largeur de la vue. J'ai également utilisé cela lorsque j'avais besoin de modifier l'intensité de l'ombre lors d'une vue de défilement ci-dessous défile, en modifiant la valeur UiImageView.alpha P>
Après avoir recherché et ne pas trouver une réponse à cette question, j'ai écrit l'extension suivante dans Swift 5: EXEMPLE D'UTILISATION: P> myView.makeClearViewWithShadow(cornderRadius: 20, shadowColor: UIColor.black.cgColor, shadowOpacity: 0.5, shadowRadius: 30)
Ma solution était de sous-classe UIView. Cela fonctionne même si la vue est redimensionnée.
import UIKit class ShadowOutsideView: UIView { let color: CGColor let opacity: Float let radius: CGFloat let offset: CGSize let shadowView = UIView() init( color: CGColor, opacity: Float, radius: CGFloat, offset: CGSize ) { self.color = color self.opacity = opacity self.radius = radius self.offset = offset super.init(frame: CGRect.zero) shadowView.frame = bounds shadowView.backgroundColor = .black shadowView.layer.shadowColor = color shadowView.layer.shadowOpacity = opacity shadowView.layer.shadowRadius = radius shadowView.layer.shadowOffset = offset shadowView.layer.masksToBounds = false self.addSubview(shadowView) } override func layoutSubviews() { shadowView.frame = bounds let inset = -(max(abs(offset.width), abs(offset.height))+radius) - 10 // - 10, had to put 10px extra otherwise it would cut shadow let maskFrame = bounds.inset(by: UIEdgeInsets(top: inset, left: inset, bottom: inset, right: inset)) let p = CGMutablePath() p.addRect(maskFrame) p.addRect(bounds) let s = CAShapeLayer() s.path = p s.fillRule = .evenOdd shadowView.layer.mask = s } }