Your description seems a bit confused here. Why declare the applySketchShadow() method but never use it?
The force conversion of UIBezierPath to CGPath smells, and suggests you never hit this code path. If so, I think you may have layers with no content and no path, so will not generate a shadow. Can you post a sample project instead? Much easier to understand. Mike. > On 10 Jun 2021, at 23:36, Alex Zavatone via Cocoa-dev > <cocoa-dev@lists.apple.com> wrote: > > Does anyone have any tips for adding multiple shadows to a view or a view’s > CGLayer on iOS in either Objectice-C or Swift? > > I’ve tried creating multiple CGLayers and adding shadows to each, then > inserting them in a view, creating multiple views and inserting the view > above or below the current view. Nothing works. > > What seems to be happening is that when I create another CGLayer or view, > there is no shadow added to the other CGLayer or view, but the regular view > certainly gets a shadow. > > FYI, I’m trying to replicate Sketch style shadows in iOS and our designers > have used multiple external shadows which is why I’m trying for multiple > views/layers. > > Thanks in advance. > Alex Zavatone > > Source: > > extension (UIView) { > func addShadowToView( > color: UIColor?, > alpha: CGFloat, > x: CGFloat, > y: CGFloat, > blur: CGFloat, > spread: CGFloat > ) { > layer.masksToBounds = false > layer.shadowColor = color?.cgColor > layer.shadowOpacity = Float(alpha) > layer.shadowOffset = CGSize(width: x, height: y) > layer.shadowRadius = blur / UIScreen.main.scale > if spread == 0 { > layer.shadowPath = nil > } else { > let deltaX = spread > let shadowRect = bounds.insetBy(dx: deltaX, dy: deltaX) > layer.shadowPath = CFBridgingRetain(UIBezierPath(rect: > shadowRect)) as! CGPath > } > } > } > > extension CALayer { > func applySketchShadow ( > color: UIColor = .black, > alpha: Float = 0.5, > x: CGFloat = 0, > y: CGFloat = 2, > blur: CGFloat = 4, > spread: CGFloat = 0) > { > masksToBounds = false > shadowColor = color.cgColor > shadowOpacity = alpha > shadowOffset = CGSize(width: x, height: y) > shadowRadius = blur / 2.0 > if spread == 0 { > shadowPath = nil > } else { > let dx = -spread > let rect = bounds.insetBy(dx: dx, dy: dx) > shadowPath = UIBezierPath(rect: rect).cgPath > } > } > } > > > And here’s how I’m trying to use it. Box2 is a UIImageView. It gets one > shadow, but never more than one. :/ > > alpha = 0.4 > x = 0 > y = 8.0 > blur = 10.0 > spread = 10.0 // 1 > > box2.addShadowToView(color: color, alpha: alpha, x: x, y: y, blur: > blur, spread: spread) > > let myView1 = UIView(frame: box2.bounds) > myView1.addShadowToView(color: color, alpha: alpha, x: x, y: y, blur: > blur, spread: spread) > box2.insertSubview(myView1, belowSubview: box2) > > let myView2 = UIView(frame: box2.bounds) > myView2.addShadowToView(color: color, alpha: alpha, x: x, y: y, blur: > blur, spread: spread) > box2.insertSubview(myView2, belowSubview: box2) > > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/cocoa-dev/mabdullah%40karelia.com > > This email sent to mabdul...@karelia.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com