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

Reply via email to